Я пытаюсь связать статическую библиотеку с общей библиотекой, я получаю следующую ошибку
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC ../../../libraries/log4cplus/liblog4cplus.a: could not read symbols: Bad value collect2: ld returned 1 exit status
Но это работало на 32-битной машине без такой ошибки. Я попытался добавить флаги -fPIC
вручную в Makefile, который тоже не решил проблему
Я попробовал флаг -whole-archive
, предложенный здесь, но без успеха.
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): relocation R_X86_64_32S against `vtable for log4cplus::spi::AppenderAttachable' can not be used when making a shared object; recompile with -fPIC ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): could not read symbols: Bad value collect2: ld returned 1 exit status
Создание liblog4cplus.a:
-
unzip log4cplus-1.1.0.zip
-
./configure --enable-static=yes --enable-threads=yes
-
vi Makefile
и добавил -fPIC в CXXFLAGS и CFLAGS -
make
Затем для компиляции моей общей библиотеки:
-
g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
-
g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl