【问题标题】:MINGW BOOST linking failsMINGW BOOST 链接失败
【发布时间】: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 扩展名

标签: c++ linux gcc boost mingw


【解决方案1】:

似乎我解决了我的问题。问题是多次使用 -L 选项和不同的路径,这些路径不提供多个搜索路径,只有第一个 -L 正在工作。此外 library 必须由 -l 选项显式指定,仅设置 -L 指向正确的目录以及带有库的子目录是不够的。 LIBRARY_PATH 环境变量对库路径的全局设置是有效的,所以我用这个替换了 -L 并将所有请求的库复制到一个目录并由 -l 请求的库指定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2010-10-04
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多