library instalar devel c++ boost linker-errors
Archivo zip, 0.2 MB

c++ - instalar - Boost:: error de enlace del sistema en Ubuntu



instalar boost linux (2)

Coloque todas las bibliotecas después de todos los archivos de objeto dentro de la línea de comando. El orden es importante aquí, a diferencia de otros sistemas operativos.

Estoy intentando compilar el siguiente código de C ++ que implementa Cambio de Árbol de Contexto ( Más información en la página de descarga ):

Archivo zip, 0.2 MB

que requiere algunas bibliotecas de impulso. Descargo la última versión de boost.org y construí todas las bibliotecas que necesitaba construir siguiendo las instrucciones en el sitio web. También modifiqué el archivo MAKE incluido en el archivo para agregar la ruta de boost lib y boost_system, pero sigo recibiendo un error. Aquí está el archivo MAKE que estoy usando:

PROGRAM = cts SOURCES = $(wildcard *.cpp) OBJECTS = $(SOURCES:.cpp=.o) CFLAGS = -Wall LDFLAGS = -lboost_program_options -lboost_filesystem -lboost_system $(PROGRAM): $(OBJECTS) Makefile g++ $(CFLAGS) -L/home/users/mnembrini/opt/boost/lib $(LDFLAGS) -o $(PROGRAM) $(OBJECTS) # Include known dependecies from -MMD #-include $(OBJECTS:.o=.d) %.o: %.cpp g++ -MMD $(CFLAGS) -I/home/users/mnembrini/opt/boost/include -c $< clean: rm -f $(OBJECTS) *.d .PHONY: clean

donde boost está en ~ / opt / boost (constains lib e include subdir). Y aquí está el error de enlace:

mnembrini@meem:~/src/cts-v1 $ make g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c ac.cpp g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c cts.cpp cts.cpp: In member function ‘virtual void SwitchingTree::update(bit_t)’: cts.cpp:402:12: warning: variable ‘snc’ set but not used [-Wunused-but-set-variable] cts.cpp: In member function ‘virtual double SwitchingTree::prob(bit_t)’: cts.cpp:432:12: warning: variable ‘snc’ set but not used [-Wunused-but-set-variable] g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c ctw.cpp g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c icsilog.cpp g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c main.cpp g++ -MMD -Wall -I/home/users/mnembrini/opt/boost/include -c PowFast.cpp g++ -Wall -L/home/users/mnembrini/opt/boost/lib -lboost_program_options -lboost_filesystem -lboost_system -o cts ac.o cts.o ctw.o icsilog.o main.o PowFast.o cts.o: In function `__static_initialization_and_destruction_0(int, int)'': cts.cpp:(.text+0x1743): undefined reference to `boost::system::generic_category()'' cts.cpp:(.text+0x174f): undefined reference to `boost::system::generic_category()'' cts.cpp:(.text+0x175b): undefined reference to `boost::system::system_category()'' ctw.o: In function `__static_initialization_and_destruction_0(int, int)'': ctw.cpp:(.text+0xfcf): undefined reference to `boost::system::generic_category()'' ctw.cpp:(.text+0xfdb): undefined reference to `boost::system::generic_category()'' ctw.cpp:(.text+0xfe7): undefined reference to `boost::system::system_category()'' main.o: In function `showHelp()'': main.cpp:(.text+0x1c): undefined reference to `boost::program_options::operator<<(std::basic_ostream<char, std::char_traits<char> >&, boost::program_options::options_description const&)'' main.o: In function `initOptions(int, char**, boost::program_options::variables_map&)'': main.cpp:(.text+0x10f): undefined reference to `boost::program_options::options_description::add_options()'' main.cpp:(.text+0x129): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'' main.cpp:(.text+0x13e): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'' main.cpp:(.text+0x153): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'' main.cpp:(.text+0x166): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'' main.cpp:(.text+0x1d6): undefined reference to `boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)'' main.cpp:(.text+0x200): undefined reference to `boost::program_options::notify(boost::program_options::variables_map&)'' main.o: In function `__static_initialization_and_destruction_0(int, int)'': main.cpp:(.text+0x1f13): undefined reference to `boost::system::generic_category()'' main.cpp:(.text+0x1f1f): undefined reference to `boost::system::generic_category()'' [snip (2-3 screens like above)] collect2: ld returned 1 exit status make: *** [cts] Error 1

Estoy usando Gcc 4.6.3 en Ubuntu 12.04 64bit.


Necesita (al igual que nm escribió anteriormente) asegúrese de tener el orden correcto de los enlaces. Básicamente, algunas implementaciones se preocupan por el orden en que se vincula el objeto, pero también las bibliotecas.

Si vincula una biblioteca que aún no ha sido referenciada por el código anterior, se descartará. Recuerdo encontrar una solución para hackear diferentes bibliotecas (versiones de) en un programa al hacer referencia al mismo símbolo pero en un objeto vinculado después del primero y luego volver a vincular otra versión de la biblioteca:

-lyourprojwantingv1 -llibraryofv1 -lyourprojwantingv2 -llibraryofv2

Personalmente, ¡creo que todo esto es solo una locura! (¡Todo ello!)