gpt4 book ai didi

c++ - 使用 g++ 静态链接到 libcrypto++

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:38 25 4
gpt4 key购买 nike

我正在尝试使用 Debian Wheezy 和 g++4.7 在我的系统上编译一个程序。我希望它能够在另一个带有 Debian Squeeze 的系统上运行(并且没有最近的 g++)。我无法在 Squeeze 上编译程序,因为我使用了旧 g++ 不支持的某些 C++11 功能,以及新的 Boost 版本和 libcrypto++9。

据我了解,解决此问题的常用方法是静态链接其他系统不支持的库,在我的情况下为 libstdcboostcrypto++.

我现在的(链接)编译器调用是

g++-4.7 .obj/btcmirco.o -Wl,-Bstatic -lboost_program_options -lboost_system -lcrypto++ -Wl,-Bdynamic -lcurl -static-libgcc -std=c++11 -o MyProgram

但是我似乎错过了一些东西,因为它会引发很多 undefined reference 错误。如果我动态链接到 crypto++(并且只有静态链接 libstdcboost),它工作正常。

谁能告诉我出了什么问题,或者我的方法是否存在根本错误?

我得到的链接器错误是(短路):

`.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 编译库。生成的静态库在与您的代码链接时不应该给您错误。

关于c++ - 使用 g++ 静态链接到 libcrypto++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236851/

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