fborges22
fborges22

Reputation: 346

Linking problem with an Shared Object in 32-bits

I am trying to migrate and old version of an software and I modernized the code with CLang-Tidy assistance and I am having an strange linking problem that is saying this:

/usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/32/crtbeginT.o: direct GOT relocation R_386_GOT32X against `_ITM_deregisterTMCloneTable' without base register can not be used when making a shared object

I tried to isolate the problem by commenting some .cpp files in CMakeLists.txt but I still can't determine what is wrong.

Here is my CMakeLists.txt section

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")

My shared object must be 32-bits mode.

Upvotes: 2

Views: 12000

Answers (1)

fborges22
fborges22

Reputation: 346

I noticed that I must compile and link without the -static option in the target_link_libraries. Since I am build a shared object I cannot use this option.

Therefore, the correct implementation of the target_link_libraries is:

target_link_libraries(client -lssl -lcrypto -ggdb -lxml2 -lz -ldl -pthread -lstdc++)

Upvotes: 2

Related Questions