静态链接到libcrypto++,使用g++
Static linking to libcrypto++, with g++
我正在用Debian Wheezy和g++4.7编译一个程序。我希望它能够运行在另一个系统与Debian挤压(没有最近的g++)。我无法在Squeeze上编译程序,因为我使用了旧g++不支持的某些C++11
功能,以及新的Boost版本和libcrypto++9。
据我所知,解决这个问题的通常方法是静态链接其他系统不支持的库,在我的情况下是libstdc
, boost
和crypto++
。
我的(链接)编译器调用现在是
g++-4.7 .obj/btcmirco.o -Wl,-Bstatic -lboost_program_options -lboost_system -lcrypto++ -Wl,-Bdynamic -lcurl -static-libgcc -std=c++11 -o MyProgram
然而,我似乎错过了一些东西,因为它抛出了很多未定义的引用错误。它工作良好,如果我动态链接到crypto++
(只有静态链接libstdc
和boost
)。
谁能告诉我哪里错了,或者我的方法是否有根本错误?
我得到的链接错误是(短):
`.text._ZN8CryptoPP22BufferedTransformationD2Ev' referenced in section `.text._ZN8CryptoPP22BufferedTransformationD1Ev[_ZN8CryptoPP22BufferedTransformationD1Ev]' of /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libcrypto++.a(cryptlib.o): defined in discarded section `.text._ZN8CryptoPP22BufferedTransformationD2Ev[_ZN8CryptoPP22BufferedTransformationD5Ev]' of /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libcrypto++.a(cryptlib.o)
`.text._ZN8CryptoPP25MessageAuthenticationCodeD2Ev' referenced in section `.text._ZN8CryptoPP25MessageAuthenticationCodeD1Ev[_ZN8CryptoPP25MessageAuthenticationCodeD1Ev]' of /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libcrypto++.a(cryptlib.o): defined in discarded section `.text._ZN8CryptoPP25MessageAuthenticationCodeD2Ev[_ZN8CryptoPP25MessageAuthenticationCodeD5Ev]' of /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libcrypto++.a(cryptlib.o)
我遇到了同样的问题,这与您试图将由g++-4.7(您的程序)生成的代码与以前版本的g++ (cryptopp库)生成的代码混合在一起有关。
这背后的原因是,当您执行编译库执行make
命令时,它使用为您的系统设置的默认版本的g++
,通常是操作系统附带的。
为了解决问题,你应该做的是用g++-4.7
编译cryptopp
库。为此,通过执行make CXX=g++-4.7
编译库。生成的静态库在与您的代码链接时不应该给您错误。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用指针从C++中的数组中获取最大值
- 使用不带参数的函数访问结构元素