Статическая ссылка на libcrypto ++, с g ++

Я пытаюсь скомпилировать программу в моей системе с Debian Wheezy и g ++ 4.7. Я хочу, чтобы он мог работать в другой системе с Debian Squeeze (и без недавнего g ++). Я не могу скомпилировать программу на Squeeze, потому что я использую определенные C++11 Возможности старого g ++ не поддерживаются, а также новая версия 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)

4

Решение

У меня возникла та же проблема, и это связано с тем, что вы пытаетесь смешать код, сгенерированный g ++ — 4.7 (ваша программа), с кодом, сгенерированным предыдущей версией g ++ (библиотека cryptopp).

Причиной этого является то, что когда вы выполняете компиляцию, библиотека выполняет make команда, она использует версию по умолчанию g++ настроить для вашей системы, обычно ту, которая поставляется с ОС.

Чтобы решить проблему, вам нужно скомпилировать cryptopp библиотека с g++-4.7,
Для этого скомпилируйте библиотеку, выполнив make CXX=g++-4.7, Результирующая статическая библиотека не должна выдавать ошибку при соединении с вашим кодом.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]