【发布时间】:2017-05-09 11:48:10
【问题描述】:
我正在尝试从 Linux 切换到 Windows 环境,但发现这是一条非常艰难的道路。
这次我想测试是否可以使用 boost 库。
我在 windows 上编译 boost 时遇到问题,所以我下载了预编译版本。我解压缩了所有东西并积极测试了我可以编译仅标头库。
然后我复制了一些简单的 boost::asio 示例。我在 Eclipse 中设置了所有内容。编译很顺利,但在链接过程中,我遇到了与 'boost::system' 内部内容相关的“未定义引用”问题。
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()'
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()'
所以我在链接选项中添加了“-lboost_system”以及库目录的路径。但这没有帮助。
g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system
我检查了库目录,发现有一堆文件名中包含“boost_system”。它们是:
- libboost_system-vc140-mt-1_62.lib
- libboost_system-vc140-mt-gd-1_62.lib
- libboost_system-vc140-mt-s-1_62.lib
- libboost_system-vc140-mt-sgd-1_62.lib
- libboost_system-vc140-s-1_62.lib
- libboost_system-vc140-sgd-1_62.lib
我不知道我应该使用哪个。我尝试将“libboost_system-vc140-mt-1_62”添加到链接选项中,我尝试了所有其他文件,我尝试将文件重命名为 linux 模式“libboost_system.a”,但没有任何效果。
g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62
我在这里做错了什么? 请帮忙... 优凯
【问题讨论】:
-
"-LC:\\ 看起来很奇怪,-L "C:\\ ?
-
我想我在这里找到了解决方案:boost.org/more/getting_started/windows.html
-
关键是预编译的二进制文件是用 Visual Studio 编译的,它们与 G++ 不兼容。妈的!
-
二进制文件也与编译它们的版本之外的任何其他版本的 Visual Studio 不兼容。这就是为什么有针对几种不同编译器的已发布二进制文件的原因。