【问题标题】:Static linking to libcrypto++, with g++使用 g++ 静态链接到 libcrypto++
【发布时间】:2013-04-26 12:47:03
【问题描述】:

我正在尝试使用 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

但是我似乎遗漏了一些东西,因为它会引发很多未定义的引用错误。如果我动态链接到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)

【问题讨论】:

  • 我已经为此提交了#708370

标签: c++ linker g++ libcrypto


【解决方案1】:

我遇到了同样的问题,这与您尝试将 g++-4.7(您的程序)生成的代码与之前版本的 g++(cryptopp 库)生成的代码混合使用有关。

这背后的原因是当你执行编译库执行make命令时,它使用为你的系统设置的默认版本g++,通常是操作系统自带的。

为了解决这个问题,你应该用g++-4.7 编译cryptopp 库。 为此,通过执行make CXX=g++-4.7 编译库。生成的静态库在与您的代码链接时不应该给您错误。

【讨论】:

  • 感谢您的回复。我没有测试过,但我想如果你有同样的问题,它会起作用。但是,如果我使用静态链接而不是使用动态链接,为什么只会出现问题?这不应该导致相同的错误(在编译或运行时)吗?
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多