Проблема связывания с общим объектом в 32-битном - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь перенести и старую версию программного обеспечения и модернизировал код с помощью CLang-Tidy, и у меня возникла странная проблема с линковкой, которая говорит об этом:

/ usr / bin/ ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/32/crtbeginT.o: прямое перемещение GOT R_386_GOT32X против `_ITM_deregisterTMCloneTable 'без базового регистра не может использоваться при создании общего объекта

Я попытался изолировать проблему, комментируя некоторые файлы .cpp в CMakeLists.txt, но все еще не могу определить, что не так.

Вот мой раздел CMakeLists.txt

add_library(client SHARED
        network/client/mistery.cpp
        network/client/mclient.cpp
        network/client/ellect.cpp
        network/client/proctcppacket.cpp
        network/client/ping.cpp
        network/client/signals.cpp
        network/client/remotecontrol.cpp
        network/client/data.cpp
        network/client/sensor.cpp
        network/client/events.cpp
        network/client/test.cpp
        network/client/misteryThread.cpp
        network/client/libNetwork.cpp
        )

target_link_libraries(client -lssl -lcrypto -ggdb -lxml2 -lz -ldl -pthread -lstdc++ -static)
set_target_properties(client PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

Мой общий объект должен быть в 32-битном режиме.

1 Ответ

0 голосов
/ 07 октября 2019

Я заметил, что я должен скомпилировать и связать без опции -static в target_link_libraries. Поскольку я создаю общий объект, я не могу использовать эту опцию.

Следовательно, правильная реализация target_link_libraries:

target_link_libraries(client -lssl -lcrypto -ggdb -lxml2 -lz -ldl -pthread -lstdc++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...