使用 Cygwin 构建 boost 的问题
我试图使用 cygwin 构建一个用 boost 开发的应用,然后希望在 linux 下来运行这个程序。我下载了最新版本的 boost 1.46.1 ,然后依照指南进行处理:http://www.boost.org/doc/libs/1_46_1/more/getting_started/unix-variants.html.
程序启动和引导都没问题,但当我检查 stage/lib 目录时发现都是 .dll, .dll.a .a 等文件,我需要包含哪些文件才能在 linux 下运行呢?我希望是一些 so 文件,但实际上这是 dll 文件。
第二个问题:
下面是我的测试代码,非常简单:
#include <boost/asio.hpp> #include <boost/bind.hpp> int main(void) { return 0; }
编译后链接的错误信息如下:
Invoking: GCC C++ Linker
/opt/Mx800SDK/vfitc/cross/bin/arm-linux-g++ -L../lib -o'boostTest' ./boostTest.o ./include/boost/fusion/include/adapt_adt_named.o -lpthread -lboost_system -lstdc++
./boostTest.o(.text+0x498): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `boost::system::system_category()'
./boostTest.o(.text+0x4b0): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `boost::system::system_category()'
./boostTest.o(.text+0x4c8): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `boost::system::generic_category()'
./boostTest.o(.text+0x4e0): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `boost::system::generic_category()'
./boostTest.o(.gnu.linkonce.t._ZN5boost4asio6detail20posix_tss_ptr_createERj+0x60): In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
: undefined reference to `boost::system::system_category()'
请大家帮忙看看具体是什么回事?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
第一个问题:
C 语言的跨平台性只能是源码级的,而不像 Java 是二进制级的,因此你需要在 Linux 下进行构建
多谢,我试试看:)
第一个问题, cygwin 和 mingw一样的, 都是windows上模拟linux, 用于编译出windows平台可用的程序, 生成的文件自然都是windows平台的. 所以, 要生成so, 得到真实linux系统上用gcc编译.
第二个问题, 显然是没有找到boost.system的实现(或者编译出的lib), 命令行应该
g++ test.cpp -L"boost 的lib路径" -I"boost的头文件包含目录" -lboost_system -lboost_thread -o test
应该可以搞定.