gpt4 book ai didi

c++ - Soci 作为 linux/ubuntu 上的静态库?

转载 作者:行者123 更新时间:2023-11-28 08:01:42 28 4
gpt4 key购买 nike

出于安全原因,我需要将程序静态链接到 soci。

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

我的问题是,当我使用这些库构建程序时,出现链接错误。

[...]/lib/libsoci_core.a(backend-loader.cpp.o): In function `(anonymous namespace)::do_unload(std::basic_string, std::allocator > const&)':

backend-loader.cpp:(.text+0x623): undefined reference to `dlclose'

查看backend-loader.cpp中的代码,调用了dlclose等动态库加载函数。

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

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

谢谢!

最佳答案

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

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

使用来自 (/usr/include/dlfcn.h) 的原型(prototype):

#include <dlfcn.h>

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

将 stub 函数编译成 *.o 文件,并将其链接到编译命令:

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

关于c++ - Soci 作为 linux/ubuntu 上的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290282/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com