使用boost序列化时链接器错误
Linker errors when using boost serialization
我正在使用boost序列化。我用:-L/opt/local/lib -lboost_serialization -stdlib=libc++
编译,但得到了几个(不可搜索的)错误:
我正在序列化一个std::vector<std::string>
:
boost::archive::text_oarchive oa(std::cout);
oa << tasks;
我的boost安装有问题吗?
boost库是包含32位和64位机器码的通用二进制文件(所以我想这不是问题):
<>之前$ file libboostrongerialization.dyliblibboostrongerialization。dylib:具有2种体系结构的Mach-O通用二进制文件libboostrongerialization。dylib(适用于体系结构i386): Mach-O动态链接共享库i386libboostrongerialization。dylib(适用于体系结构x86_64): Mach-O 64位动态链接共享库x86_64之前
我在Mac OS X 10.7上使用sudo port install boost +universal
安装了boost
我可以用下面的代码重现这个问题:
#include "boost/archive/text_oarchive.hpp"
#include "boost/serialization/vector.hpp"
#include <vector>
#include <string>
int main()
{
std::vector<std::string> tasks;
boost::archive::text_oarchive oa(std::cout);
oa << tasks;
}
当使用g++
或clang++
各自的默认标志并与-lboost_serialization
链接时,此编译和链接没有问题。然而,当使用clang++
与libc++
链接失败时,基本上是错误消息引用(我在/opt/boost
安装了Boost):
clang++ -c -stdlib=libc++ -I/opt/boost -W -Wall -ansi serialize.cpp
clang++ -o serialize.tsk -L/opt/boost/stage/lib -stdlib=libc++ serialize.o -lboost_serialization
基于此,我假设使用-stdlib=libc++的构建希望有自己的Boost构建,并根据Boost安装指南构建一个:
tar jxvf ~/Downloads/boost_1_48_0.tar.bz2
cd boost_1_48_0/tools/build/v2
# change the build rules to use -stdlib=libc++:
mv tools/clang-darwin.jam tools/clang-darwin.jam.orig
sed -e 's/CONFIG_COMMAND)"/CONFIG_COMMAND)" -stdlib=libc++/' < tools/clang-darwin.jam.orig > tools/clang-darwin.jam
./boostrap.sh
sudo ./b2 install --prefix=/opt/boost-clang
cd ../../..
/opt/boost-clang/bin/b2 --build-dir=/opt/tmp toolset=clang stage
sudo /opt/boost-clang/bin/b2 --build-dir=/opt/tmp toolset=clang install --prefix=/opt/boost-clang
我对clang-darwin.jam
所做的编辑几乎肯定不是那些预期的,但他们似乎做到了这一点:我不太了解"bjam",我只是试图找到一个合适的位置来应用更改。安装的某些步骤使用sudo
将东西安装到受保护的目录中。显然,您可以将其安装到具有写权限的其他目录中。我只是在我的机器上安装了一些东西,以防止我不小心把它弄乱。
/opt/llvm/bin/clang++ -stdlib=libc++ -W -Wall -ansi -I/opt/boost-clang -c -o serialize.o serialize.cpp
/opt/llvm/bin/clang++ -stdlib=libc++ -L/opt/boost-clang/lib serialize.o -lboost_serialization -o serialize.tsk
看起来你的boost库可能是32位的
这是一个您不会注意到的问题,直到您尝试使用少数几个不是头文件的boost utils之一。
相关文章:
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接