如何在Linux中使用.so文件进行链接和编译

时间:2013-10-02 04:18:27

标签: c gcc

我有.c和.so文件。我尝试使用以下编译:{{1​​}}。在那个.c文件中,我通过gcc main.c -ldl链接到.so文件。如何使用.c。

编译.so文件

3 个答案:

答案 0 :(得分:2)

可能你可以这样做:

链接时

g++ -o prog prog.o -ldllname

如果libdllname.so不在系统目录中,则将其目录添加到库路径:

g++ -o prog prog.o -L/path/to/my/library/folder -ldllname

答案 1 :(得分:1)

这是基于您的进一步评论。首先要保护头文件的声明。

#ifndef HEADER_PROTECT
#define HEADER_PROTECT

---------- Here is the content of header

#endif

接下来,检查您的代码,您是否定义了多个定义。或者您是否再次重新定义标准功能?您能否发布您的代码以更好地指导您? 看起来你已经重新定义了Close_Comm(),你能查一下吗?错误说定义也在main.c中。

以下是编译共享对象并链接它的一般方法。 编译共享对象。

-g : for debug information
fPIC: for position independent code
$gcc -fPIC -g myfile

The following will create the shared  object libmyfile.so

$gcc -shared -o libymyfile.so myfile.o

Now,In order to link it with your main.c.
I assume that the libmyfile.so is in your current path, thus -L./

$gcc main.c -o main.out -L./ -lmyfile

Now, you need to export the LD_LIBRARY_PATH on the bash; in order to execute the binary.

$LD_LIBRARAY_PATH=$LD_LIBRARAY_PATH:./
$./main.out

dlsym是在运行时从共享对象加载符号。如果要在运行时加载共享对象,可以使用它。以下是dlsym Hack the standard function in library and call the native library function afterwards

的示例之一

答案 2 :(得分:0)

dlsym()用于在打开的库文件中查找符号。 您首先需要使用dlopen()才能打开该文件,然后才能使用dlsym()