gpt4 book ai didi

c++ - 即使在链接后也将 "Undefined Reference" boost 到系统

转载 作者:太空狗 更新时间:2023-10-29 21:26:14 26 4
gpt4 key购买 nike

我在 eclipse cdt windows 的 boost 中包含以下库。

  1. libboost_filesystem-vc100-mt-1_51
  2. libboost_system-vc100-mt-1_51

从顾问输出的顶部(下方)来看,它们似乎连接良好。但是我收到以下错误。

咨询输出/错误:

18:10:00 **** Incremental Build of configuration Debug for project Boost ****
Info: Internal Builder is used for build
g++ "-LC:\\Users\\Mike\\Desktop\\Lib\\boost_1_51_0\\stage\\lib" -o Boost.exe "src\\Boost.o" -llibboost_filesystem-vc100-mt-1_51 -llibboost_system-vc100-mt-1_51
src\Boost.o: In function `_static_initialization_and_destruction_0':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
src\Boost.o: In function `ZN5boost10filesystem9file_sizeERKNS0_4pathE':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/operations.hpp:447: undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
src\Boost.o: In function `path<char [9]>':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/path.hpp:139: undefined reference to `boost::filesystem::path::codecvt()'
src\Boost.o: In function `ZN5boost10filesystem11path_traits8dispatchISbIwSt11char_traitsIwESaIwEEEEvRKSsRT_RKSt7codecvtIwciE':
C:/Users/Mike/Desktop/Lib/boost_1_51_0/boost/filesystem/path_traits.hpp:174: undefined reference to `boost::filesystem::path_traits::convert(char const*, char const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&, std::codecvt<wchar_t, char, int> const&)'
collect2: ld returned 1 exit status

从中可以看出系统库没有正确连接/链接。

我的代码:

#include <boost/filesystem.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
using namespace boost::filesystem;
file_size("test.txt");
return 0;

}

我错过了什么吗?我还需要添加其他内容吗?

最佳答案

每个 C++ 编译器都有自己的函数名修饰规则和实现(将 C++ 函数名转换为 ASM 或 C 类函数)。
例如 MSVC 将 boost::system::generic_category 转换为 ?generic_category@system@boost@@YAABVerror_category@12@XZ,但在这种情况下,您使用的 DLL 是使用 MSVC2010(vc100) 和具有不同的 Eclipse g++ 编译器构建的mangling names 的规则,所以它期望在库中找不到它的其他东西,它会生成链接器错误。

作为一般规则,使用与您在项目中使用的编译器不同的编译器编译的 DLL 中的 C++ 对象是不合法的,甚至使用使用以前版本的编译器编译的 DLL 也是不合法的是 boost 将 vc100 添加到其 DLL 名称以通知您只能将其与 vc100( MSVC2010 ) 一起使用的原因

关于c++ - 即使在链接后也将 "Undefined Reference" boost 到系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12133260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com