我有.c和.so文件。我尝试使用以下编译:{{1}}。在那个.c文件中,我通过gcc main.c -ldl
链接到.so文件。如何使用.c。
答案 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()