Ferox
24-01-2006, 16:24
Hallo
Ich bin ziemlich neu in der Programmierung unter Linux, da ich bisher immer nur unter Windows programmiert habe.
Für die Arbeit muss ich jetzt ein Projekt unter Linux weiterentwickeln.
Als Basis habe ich ein C++ Testprogramm mit 3 static Libraries .a und 2 shared Libraries. so bekommen.
Doch wenn ich das jetzt kompiliere und linke bekomme ich einige Fehler. Ich habe schon viel gegoogled doch komme nicht wirklich dahinter wo der Fehler liegt.
Zum Compilen mit dem g++ habe ich mit mir ein Skript geschrieben:
g++-3.4 -Wall -g -c test.cpp -o test.o
echo "compile success"
echo "___________________________________"
g++-3.4 -Wall -g -o test test.o -I. -L. -lEOT -lMobileCore -lMobileNumeric -lMobileCore -lMoAlgebra -lTinyXML
echo "link success"
echo "___________________________________"
#LD_LIBRARY_PATH="."
./test
Wenn ich nun damit versuche die Libraries zu linken bekomme ich eine Menge undefined Referencen in den Shared Libraries:
/libEOT.a(MoObstacle.o): In function
> `std::__simple_alloc<std::_List_node<MoObstacle*>,
> std::__default_alloc_template<true, 0>
>
> >::deallocate(std::_List_node<MoObstacle*>*, unsigned
>
> int)':/usr/include/g++/bits/stl_alloc.h:242: undefined reference to
> `std::__default_alloc_template<true, 0>::deallocate(void*, unsigned int)'
> ./libEOT.a(MoObstacle.o): In function
> `std::__simple_alloc<std::_List_node<MoObstacle*>,
> std::__default_alloc_template<true, 0> >::allocate(unsigned
> int)':/usr/include/g++/bits/stl_alloc.h:232: undefined reference to
> `std::__default_alloc_template<true, 0>::allocate(unsigned int)'
> ./libMobileCore.so: undefined reference to `lsodar_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_free_list'
> ./libMobileCore.so: undefined reference to `srcar_'
> ./libMoAlgebra.so: undefined reference to `xerbla_'
> ./libMoAlgebra.so: undefined reference to `dscal_'
> ./libMobileCore.so: undefined reference to `hybrj_'
> ./libMobileCore.so: undefined reference to `dgetrs_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_force_new'
> ./libMoAlgebra.so: undefined reference to `dswap_'
> ./libMoAlgebra.so: undefined reference to `e_wsfe'
> ./libMobileCore.so: undefined reference to `rpoly_'
> ./libMobileCore.so: undefined reference to `intdy_'
> ./libMobileCore.so: undefined reference to `hybrd_'
> ./libMobileCore.so: undefined reference to `dpptrs_'
> ./libMobileCore.so: undefined reference to `dspmv_'
> ./libMobileCore.so: undefined reference to `std::basic_istream<char,
> std::char_traits<char> >::seekg(long, std::_Ios_Seekdir)'
> ./libMobileCore.so: undefined reference to `dcopy_'
> ./libMobileCore.so: undefined reference to `ode_'
> ./libMobileCore.so: undefined reference to `dpptrf_'
> ./libMoAlgebra.so: undefined reference to `ddot_'
> ./libMoAlgebra.so: undefined reference to `dgemm_'
> ./libMobileCore.so: undefined reference to `std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >::_S_empty_rep_storage'
> ./libMoAlgebra.so: undefined reference to `dtrsm_'
> ./libMoAlgebra.so: undefined reference to `do_fio'
> ./libMoAlgebra.so: undefined reference to `s_cat'
> ./libMobileCore.so: undefined reference to `dgetrf_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_node_allocator_lock'
> ./libMoAlgebra.so: undefined reference to `idamax_'
> ./libMoAlgebra.so: undefined reference to `ilaenv_'
> ./libMoAlgebra.so: undefined reference to `dger_'
> ./libMoAlgebra.so: undefined reference to `daxpy_'
> ./libMobileCore.so: undefined reference to `dpptri_'
> ./libMobileCore.so: undefined reference to `vode_'
> ./libMoAlgebra.so: undefined reference to `lsame_'
> ./libMoAlgebra.so: undefined reference to `s_wsfe'
> collect2: ld returned 1 exit status
Muss ich vielleicht etwas beachten, wenn ich sowohl shared als auch static Libraries linken möchte?
Ich bin ziemlich neu in der Programmierung unter Linux, da ich bisher immer nur unter Windows programmiert habe.
Für die Arbeit muss ich jetzt ein Projekt unter Linux weiterentwickeln.
Als Basis habe ich ein C++ Testprogramm mit 3 static Libraries .a und 2 shared Libraries. so bekommen.
Doch wenn ich das jetzt kompiliere und linke bekomme ich einige Fehler. Ich habe schon viel gegoogled doch komme nicht wirklich dahinter wo der Fehler liegt.
Zum Compilen mit dem g++ habe ich mit mir ein Skript geschrieben:
g++-3.4 -Wall -g -c test.cpp -o test.o
echo "compile success"
echo "___________________________________"
g++-3.4 -Wall -g -o test test.o -I. -L. -lEOT -lMobileCore -lMobileNumeric -lMobileCore -lMoAlgebra -lTinyXML
echo "link success"
echo "___________________________________"
#LD_LIBRARY_PATH="."
./test
Wenn ich nun damit versuche die Libraries zu linken bekomme ich eine Menge undefined Referencen in den Shared Libraries:
/libEOT.a(MoObstacle.o): In function
> `std::__simple_alloc<std::_List_node<MoObstacle*>,
> std::__default_alloc_template<true, 0>
>
> >::deallocate(std::_List_node<MoObstacle*>*, unsigned
>
> int)':/usr/include/g++/bits/stl_alloc.h:242: undefined reference to
> `std::__default_alloc_template<true, 0>::deallocate(void*, unsigned int)'
> ./libEOT.a(MoObstacle.o): In function
> `std::__simple_alloc<std::_List_node<MoObstacle*>,
> std::__default_alloc_template<true, 0> >::allocate(unsigned
> int)':/usr/include/g++/bits/stl_alloc.h:232: undefined reference to
> `std::__default_alloc_template<true, 0>::allocate(unsigned int)'
> ./libMobileCore.so: undefined reference to `lsodar_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_free_list'
> ./libMobileCore.so: undefined reference to `srcar_'
> ./libMoAlgebra.so: undefined reference to `xerbla_'
> ./libMoAlgebra.so: undefined reference to `dscal_'
> ./libMobileCore.so: undefined reference to `hybrj_'
> ./libMobileCore.so: undefined reference to `dgetrs_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_force_new'
> ./libMoAlgebra.so: undefined reference to `dswap_'
> ./libMoAlgebra.so: undefined reference to `e_wsfe'
> ./libMobileCore.so: undefined reference to `rpoly_'
> ./libMobileCore.so: undefined reference to `intdy_'
> ./libMobileCore.so: undefined reference to `hybrd_'
> ./libMobileCore.so: undefined reference to `dpptrs_'
> ./libMobileCore.so: undefined reference to `dspmv_'
> ./libMobileCore.so: undefined reference to `std::basic_istream<char,
> std::char_traits<char> >::seekg(long, std::_Ios_Seekdir)'
> ./libMobileCore.so: undefined reference to `dcopy_'
> ./libMobileCore.so: undefined reference to `ode_'
> ./libMobileCore.so: undefined reference to `dpptrf_'
> ./libMoAlgebra.so: undefined reference to `ddot_'
> ./libMoAlgebra.so: undefined reference to `dgemm_'
> ./libMobileCore.so: undefined reference to `std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >::_S_empty_rep_storage'
> ./libMoAlgebra.so: undefined reference to `dtrsm_'
> ./libMoAlgebra.so: undefined reference to `do_fio'
> ./libMoAlgebra.so: undefined reference to `s_cat'
> ./libMobileCore.so: undefined reference to `dgetrf_'
> ./libMobileCore.so: undefined reference to
> `std::__default_alloc_template<true, 0>::_S_node_allocator_lock'
> ./libMoAlgebra.so: undefined reference to `idamax_'
> ./libMoAlgebra.so: undefined reference to `ilaenv_'
> ./libMoAlgebra.so: undefined reference to `dger_'
> ./libMoAlgebra.so: undefined reference to `daxpy_'
> ./libMobileCore.so: undefined reference to `dpptri_'
> ./libMobileCore.so: undefined reference to `vode_'
> ./libMoAlgebra.so: undefined reference to `lsame_'
> ./libMoAlgebra.so: undefined reference to `s_wsfe'
> collect2: ld returned 1 exit status
Muss ich vielleicht etwas beachten, wenn ich sowohl shared als auch static Libraries linken möchte?