交叉编译为x86时,libboost-system链接器错误

时间:2012-05-09 11:39:00

标签: c++ linux boost linker

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

  

CommunicationModule.cpp :(。text + 0x68c1):对boost::system::generic_category()的未定义引用

     

CommunicationModule.cpp :(。text + 0x68d7):对boost::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.so-L /usr/lib/libboost_system-mt.so,但这些都没有解决问题。与仅在构建语句中添加/usr/lib/libboost_system.a/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):未定义的引用   升压::系统:: get_generic_category()

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

2 个答案:

答案 0 :(得分:1)

看看我自己的安装,似乎libboost-system-dev没有安装库。使用dpkg告诉我安装了什么bz 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位虚拟机来完成这项工作,而不是交叉编译所有依赖项。

答案 1 :(得分:0)

我遇到了与boost_serialization相同的问题,这是我在几次谷歌搜索后发现的......

首先需要单独编译这个库: 所以在下载了boost库之后,解压缩并执行 sudo ./bootstrap.sh'然后 sudo ./b2 --with-system

执行 locate boost_system

后,您应该在此步骤之后找到结果

然后手动链接我做了: 两者都应该工作

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

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

这是一个小小的工作,我仍然在寻找如何正确链接库

我希望这有助于:)

相关问题