4

我有 .c 和 .so 文件。我尝试使用以下编译:gcc main.c -ldl. 在那个 .c 文件中,我通过 .so 文件链接到 .so 文件dlsym()。如何使用带有 .c 的 .so 文件进行编译。

4

3 回答 3

4

也许你可以这样做:

链接时:

g++ -o prog prog.o -ldllname

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

g++ -o prog prog.o -L/path/to/my/library/folder -ldllname
于 2013-10-02T07:52:46.627 回答
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破解库中的标准函数并随后调用本机库函数的示例之一

于 2013-10-02T04:36:10.007 回答
0

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

于 2013-10-02T04:25:58.903 回答