另一个对boost :: system :: generic的未定义引用

时间:2014-08-10 08:59:02

标签: c++ boost

所以我完成了我的项目 - 每个模块都可以正常运行,但是当我尝试将它们连接在一起时突然间我不能,因为我收到以下错误:

obj/main.o: In function `__static_initialization_and_destruction_0':
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/main.o: In function `error_code':
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:315: undefined reference to `boost::system::system_category()'
obj/main.o: In function `boost::asio::error::get_system_category()':
/usr/lib/boost_1_47_0/boost/asio/error.hpp:216: undefined reference to `boost::system::system_category()'
obj/asio.o: In function `__static_initialization_and_destruction_0':
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/lib/boost_1_47_0/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [all] Error 1

这是我用来编译的命令:

[root@engdev GDAgent]# make all
g++ --std=c++0x -c main.cpp -o obj/main.o -g -I/usr/include/mysql -I/usr/include/mysql++/ -I/usr/lib/boost_1_47_0/ -lmysqlpp -lnsl -lz -lm -lboost_thread -lboost_system -L/usr/lib64/ -L/usr/lib/mysql/ -I/usr/lib/boost_1_47_0/stage/lib/
g++ --std=c++0x -Wall -Wextra obj/main.o obj/asio.o obj/dbase.o obj/serial.o -o GDAgent -g -L/obj-L/usr/lib/ -L/usr/lib/mysql/ -I/usr/include/mysql -lmysqlpp -lm -lnsl -lz -I/usr/include/mysql++/ -lmysqlpp -I/usr/lib/boost_1_47_0/ -lboost_thread  -I/usr/lib/boost_1_47_0/stage/lib/ -lboost_system-mt

这是我的makefile:

all: GDAgent
        g++ --std=c++0x -Wall -Wextra obj/main.o obj/asio.o obj/dbase.o obj/serial.o -o GDAgent -g -L/obj-L/usr/lib/ -L/usr/lib/mysql/ -I/usr/include/mysql -lmysqlpp -lm -lnsl -lz -I/usr/include/mysql++/ -lmysqlpp -I/usr/lib/boost_1_47_0/ -lboost_thread  -I/usr/lib/boost_1_47_0/stage/lib/ -lboost_system-mt

GDAgent: include/serial.h  include/dbase.h
        g++ --std=c++0x -c main.cpp -o obj/main.o -g -I/usr/include/mysql -I/usr/include/mysql++/ -I/usr/lib/boost_1_47_0/ -lmysqlpp -lnsl -lz -lm -lboost_thread -lboost_system -L/usr/lib64/ -L/usr/lib/mysql/ -I/usr/lib/boost_1_47_0/stage/lib/

dbase.o: include/dbase.cpp include/dbase.h include/serial.h
        g++ --std=c++0x -o obj/dbase.o -c include/dbase.cpp -g -I/usr/include/mysql++ -I/usr/include/mysql -I/usr/lib/boost_1_47_0/ -lmysqlpp -lnsl -lz -lm -lboost_thread -L/usr/lib/ -L/usr/lib/mysql/ -I/usr/lib/boost_1_47_0/stage/lib/ -lboost_system

serial.o: include/serial.cpp include/serial.h include/dbase.h
        g++ --std=c++0x  -o obj/serial.o  -c include/serial.cpp -g -I/usr/include/mysql -I/usr/lib/boost_1_47_0/ -lmysqlpp -lnsl -lz -lm -lboost_thread -lboost_system -L/usr/lib/ -L/usr/lib/mysql/ -I/usr/lib/boost_1_47_0/stage/lib/

asio.o:  include/asio.cpp include/serial.h include/dbase.h
        g++ --std=c++0x  -o obj/asio.o -c include/asio.cpp -g -I/usr/include/mysql -I/usr/lib/boost_1_47_0/ -lmysqlpp -lnsl -lz -lm -lboost_thread -L/usr/lib/ -L/usr/lib/mysql/ -I/usr/lib/boost_1_47_0/stage/lib/ -lboost_system

我一直在这里搜索解决方案,到目前为止我找到的解决方案要么我做得不正确,要么他们根本不是我问题的原因。 (例如,将-lboost_system-mt移动到最后等)

那么我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

使用-L代替-I

为您的库路径添加前缀
-L/usr/lib/boost_1_47_0/stage/lib/ -lboost_system-mt

-I适用于标头包含路径。