为没有.so文件的共享库构建

时间:2016-10-26 15:58:23

标签: c gcc linker shared-libraries ld

我正在编译调用共享库的C源,并且只在构建机器上有库头,而不是.so文件(不同的cpu架构)。如何在运行时查找代码并加载/usr/lib/libx.so?

2 个答案:

答案 0 :(得分:1)

从LD_LIBRARY_PATH的原始建议中修改。

假设您使用的是Linux系统,可以在执行开始之前通过LD_PRELOAD环境变量加载共享库:

$ LD_PRELOAD="/usr/lib/libx.so" your_app

然而,与-Wl,--unresolved-symbols=ignore-in-object-files的关联可能不是一个好习惯。我建议使用dlsym从动态库加载任意符号。例如,

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

int main ()
{
   void *handle;
   void (*foo_fp) (void);  // function signature from dynamic library

   // Dynamically load libfoo.so, searching it from LD_LIBRARY_PATH
   handle = dlopen ("libfoo.so", RTLD_LAZY);

   // Load function 'foo' from libfoo.so
   foo_fp = dlsym(handle, "foo");

   // Calls 'foo' from libfoo.so
   foo_fp();
   return 0;
}

编译:

gcc -o main main.c -ldl

执行:

export LD_LIBRARY_PATH=<location of libfoo.so>
./main

答案 1 :(得分:1)

创建一个&#39;虚拟&#39;导出所需符号的libx.so文件。