2012-07-02 46 views
0

为了安全起见,我需要将程序静态链接到soci。Soci作为linux/ubuntu上的静态库?

我构建了静态库libsoci_core.a和libsoci_postgresql.a,因为我的后端是postgresql。

我的问题是,当我用这些库建立我的程序时,我得到链接错误。

[...]/LIB/libsoci_core.a(后端-loader.cpp.o):在功能 `(匿名命名空间):: do_unload(性病:: basic_string的,标准::分配器>常量&) ':

后端-loader.cpp :(文字+ 0x623):未定义的引用`dlclose'

综观后端-loader.cpp的代码,它调用dlclose等动态库加载功能。

所以我想知道是否有可能避免这些错误,并有一个'真正的'静态构建。

或者我应该使用什么样的选项来避免这个错误,并且代码会调用静态posgresql库?

谢谢!

回答

1

由于您正在尝试构建静态链接库,因此需要删除/删除dl *函数。

一种方法是使用自己的函数创建一个dlstub.c文件并将它们链接到库。

使用原型从(/usr/include/dlfcn.h):

#include <dlfcn.h> 

int dlclose(void *){} 
char *dlerror(void){} 
void *dlopen(const char *, int){} 
void *dlsym(void *restrict, const char *restrict){} 

编译存根功能集成到一个* .o文件将,并将其链接到您的编译命令:

gcc -c -O2 -g dlstubs.c 
gcc -static ... -o dlstubs.o ... 
+0

thx,我会试试这个! – unludo