如何在共享库中链接log4cplus.a?

时间:2014-09-30 15:26:06

标签: c++ log4cplus

我尝试通过链接我编译的“liblog4cplus.a”和-fPIC选项来创建一个名为“logtest.so”的共享库。

这是“logtest.cpp”(通过从log4cplus网站复制,仅用于测试目的):

#include "log4cplus/logger.h"
#include "log4cplus/loggingmacros.h"
#include "log4cplus/configurator.h"


using namespace log4cplus;

void test()
{
    initialize();
    BasicConfigurator config;
    config.configure();
}

这是命令:

g++ -shared logtest.cpp -L . -llog4cplus -pthread -o liblogtest.so -lrt -fPIC

以下是错误消息:

/usr/bin/ld: ./liblog4cplus.a(configurator.o): relocation R_X86_64_32S against `_ZTVN9log4cplus23ConfigureAndWatchThreadE' can not be used when making a shared object; recompile with -fPIC
./liblog4cplus.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

致电:

nm liblog4cplus.a | grep _ZTVN9log4cplus23ConfigureAndWatchThreadE

我明白了:

0000000000000000 V _ZTVN9log4cplus23ConfigureAndWatchThreadE

我尝试添加"-Wl,-rpath,$ORIGIN",但仍会收到相同的错误消息。

我想在共享库中链接静态库有一些关系,但我尝试了所有的建议,但它仍然不起作用。

1 个答案:

答案 0 :(得分:1)

配置log4cplus时,使用--with-pic选项获取一个带有PIC代码的静态库,该代码可以链接到SO中。