使用 Cygwin 构建 boost 的问题

鉴客 发布于 2011/07/07 14:21
阅读 2K+
收藏 0

我试图使用 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()'

请大家帮忙看看具体是什么回事?

加载中
1
Jackarain
Jackarain

第一个问题, 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

应该可以搞定.

鉴客
鉴客
多谢,我试试看:)
0
红薯
红薯

第一个问题:
C 语言的跨平台性只能是源码级的,而不像 Java 是二进制级的,因此你需要在 Linux 下进行构建

返回顶部
顶部