4

我正在尝试在 Ubuntu 11.04 x64 上构建一个 32 位应用程序。由于 libboost 的链接器错误,我在构建时遇到了一些问题。build 语句包含-lboost_system在其中,但是当我尝试构建时,我得到了一堆:

CommunicationModule.cpp:(.text+0x68c1): undefined reference toboost::system::generic_category()

CommunicationModule.cpp:(.text+0x68d7): undefined reference toboost::system::system_category()

我在谷歌上找到的所有东西都说我需要链接到 boost_system 库。我发现的一个地方说尝试直接链接到它,但是当我这样做时locate boost_system结果是空的。当我尝试执行时,sudo apt-get install libboost-system-dev它告诉我它已经安装了。我在这里有点不知所措。该库已安装,但没有被定位找到?

谁能告诉我我需要做什么才能正确链接到 boost::system?我对 linux 和编译器的复杂性相当陌生,所以这里的任何帮助将不胜感激。

更新:

这是输出dpkg -L libboost-system1.42-dev

/. 
/usr 
/usr/share 
/usr/share/doc
/usr/share/doc/libboost-system1.42-dev
/usr/share/doc/libboost-system1.42-dev/copyright
/usr/share/doc/libboost-system1.42-dev/NEWS.Debian.gz
/usr/share/doc/libboost-system1.42-dev/README.Debian.gz 
/usr/lib
/usr/lib/libboost_system.a
/usr/lib/libboost_system-mt.so
/usr/lib/libboost_system-mt.a 
/usr/lib/libboost_system.so

有没有我可以用来直接链接到其中之一的标志?我尝试使用-L /usr/lib/libboost_system.soand-L /usr/lib/libboost_system-mt.so并没有解决这个问题。与仅添加/usr/lib/libboost_system.aand/usr/lib/libboost_system-mt.a到构建语句相同。

这是编译行:

g++ -m32 -Wl,-O1 -o UTNaoTool [.o files] -L/usr/lib32 -lqglviewer-qt4 -lqwt-qt4 -lboost_system -lboost_thread -lQtXml -lQtOpenGL -lQtGui -lQtNetwork -lQtCore -lGLU -lpthread

更新 2:

我下载了 boost 1.49 并为 32 位构建了所有内容,这似乎有所帮助。很多错误消失了,但现在我仍然有这些:

CommunicationModule.cpp:(.text+0x68c1): undefined reference to boost::system::get_generic_category()

请注意,功能不同。所以我所有的错误都与未定义的引用get_system_category()get_generic_category()现在有关。我尝试将 a 添加-lboost_filesystem到 build 命令,但这并没有解决这个问题,并且我确保它引用了我在构建时构建的 32 位库libboost_system

4

2 回答 2

1

查看我自己的安装,似乎 libboost-system-dev 没有安装库。用来dpkg告诉我安装了什么,libboost-system-dev我得到:

$ dpkg -L  libboost-system-dev
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libboost-system-dev
/usr/share/doc/libboost-system-dev/copyright
/usr/share/doc/libboost-system-dev/changelog.gz

闲逛,我认为您需要安装libboost-system1.48.1(或其他版本)。

sudo apt-get install libboost-system1.XX.Y

您还可以使用该命令搜索库find,例如,在下面搜索/usr所有以 开头的文件libboost_system

find /usr -name "libboost_system*"

编辑:由于您是从 64 位操作系统交叉编译到 32 位操作系统,因此您需要 32 位版本的 boost 库。我很想设置一个小型 32 位虚拟机来执行此操作,而不是交叉编译所有依赖项。

于 2012-05-09T12:12:40.603 回答
0

I had the same problem with boost_serialization here is what i found out after couple of googling..

first this library need to be compiled separately : so after downloading the boost library ,extract it and execute sudo ./bootstrap.sh' then sudo ./b2 --with-system

after this step you should be find a result when executing locate boost_system

then to link it manually I did: both should work

g++ boostexample.cpp -o run /PATH/libboost_serialization.a

g++ boostexample.cpp -o run -L/PATH/ -lboost_serialization

well this is a little work around and I'm still looking for how to link the library properly

I hope this helped :)

于 2012-05-09T12:11:33.037 回答