【发布时间】:2014-12-28 14:20:46
【问题描述】:
我正在尝试使用 MINGW 和 BOOST 编译此代码
http://ttic.uchicago.edu/~cotter/projects/SBP/
首先我在 Linux/UBUNTu 下编译,没有问题。然后我尝试在 W764 下使用 MINGW64。直到创建对象的级别一切正常,但链接失败。这是一个命令
g++ issvm_evaluate.o svm_kernel_base.o svm_kernel_private_cache.o
svm_optimizer_base.o svm_optimizer_classification_biased_perceptron.o
svm_optimizer_classification_biased_sbp.o
svm_optimizer_classification_biased_smo.o
svm_optimizer_classification_biased_sparsifier.o
svm_optimizer_classification_private_find_water_level.o
svm_optimizer_classification_unbiased_perceptron.o
svm_optimizer_classification_unbiased_sbp.o
svm_optimizer_classification_unbiased_smo.o
svm_optimizer_classification_unbiased_sparsifier.o -o issvm_evaluate -fopenmp
-LC:/boost_1_57_0/boost_1_57_0/bin.v2/libs/serialization/build/gcc-mingw-
4.9.0/release/ -lstdc++ -lm -LC:/boost_1_57_0/boost_1_570/bin.v2/libs/iostreams
/build\gcc-mingw-4.9.0/release/ -LC:/boost_1_57_0/boost_1_570/bin.v2
/libs/program_options/build/gcc-mingw-4.9.0/release/
和回应
issvm_evaluate.o:issvm_evaluate.cpp:(.text+0x2a81): undefined reference to boos
t::archive::detail::archive_serializer_map<boost::archive::binary_iarchive>::era
se(boost::archive::detail::basic_serializer const*)'
issvm_evaluate.o:issvm_evaluate.cpp:(.text+0x2ac1): undefined reference to `boos
t::archive::detail::archive_serializer_map<boost::archive::binary_iarchive>::era
se(boost::archive::detail::basic_serializer const*)'
使用 gcc 中的 l 选项从 LINUX 创建文件,但我找不到构建库或 文件 ${patsubst %,-lboost_%,$(BOOST_LIBRARIES)} 在 LINUX 下,所以我怀疑标题就足够了,但在 W7 下我使用 L 选项并提供目录来构建 boost 库。知道问题出在哪里吗??
由于 W7 中 BOOST 的构建目录包含很多库文件,包括 dll,可能应该使用编译器的 l 选项并链接到 dll ??
我也尝试过使用正斜杠,但它是一样的
【问题讨论】:
-
你实际上并没有链接任何 Boost 库,你只是告诉链接器去哪里find库。
-L选项添加搜索路径,-l(小写 L)添加要链接的库(应该在-L选项提供的路径中找到)。 -
而且您可能应该将所有 Boost 库安装到一个公共路径,如果该路径不在链接器默认列表中(在这种情况下,您根本不必添加
-L选项)。 -
最后一点吹毛求疵:你在显示的命令行中使用的斜线是正斜线。反斜杠是 \.
-
是的,我用斜线更改了尝试的命令,但没有更改问题的文本
-
所以我应该像在 LINUX 的 makefile 中一样添加带有 l 选项的库吗?其中有很多。带有 .a .o 和 dll 扩展名