我正在尝试使用boost套接字为一个简单的服务器制作我的第一个Makefile。
我可以让代码在windows下运行。
要让它在linux下运行,我运行命令
c++ -I /var/boost/boost_1_55_0/ Source.cpp -o source -lboost_system
我有一个make文件 http://pastebin.com/QTms69Kd
然而,当我运行它时,我得到的错误就像未定义引用`boost :: system :: generic_category()'
在我忘记了命令中的boost_system之前,我收到了这个错误。我做错了什么?
答案 0 :(得分:1)
你的Makefile
看起来正确,我通常希望它能在linux上运行。
您链接boost::system
是正确的。 boost::asio
库仅为#34;标题为#34;但它使用boost::system
库来显示错误消息,因此必须将boost::system
链接到构建中。
然而,它们与连接增强库有一些并发症。 首先,除了库本身之外,可能还需要库的位置,例如:
LDFLAGS := -L/path/to/boost_1_55_0/built_library_directory -lboost_system
其次,boost
为库名添加后缀以定义boost版本,可能还有编译器
因此,Windows上的boost_system
变为:
libboost_system-vc140-mt-1_60.lib // MSVC 2015, boost 1.60
libboost_system-mgw49-mt-1_60.a // MinGW, boost 1.60
在Fedora安装上(在/ usr / lib64中):
libboost_system.a
libboost_system.so // symbolic link to:
libboost_system.so.1.60.0 // gcc, boost 1.60
所以我认为您的问题不在于Makefile
,而在于您如何构建boost
库以及放置它们的位置。
另外,为什么要使用boost
这样的旧版本?