在Shared libraries with GCC on Linux的帮助下,我试图让libadd1.so
成功。代码运行完美。
但是当我使用dlopen()
和dlsym()
尝试相同的操作时,我收到的错误如下所示。
$ g++ -L/home/shreya/Desktop/soFiles -Wall -o test main.c -ladd1
main.c: In function ‘int main()’:
main.c:14:14: warning: variable ‘ptrVar’ set but not used [-Wunused-but-set-variable]
pt2function ptrVar;
^
/tmp/ccpdIje6.o: In function `main':
main.c:(.text+0x19): undefined reference to `dlopen'
main.c:(.text+0x29): undefined reference to `dlerror'
main.c:(.text+0x54): undefined reference to `dlerror'
main.c:(.text+0x68): undefined reference to `dlsym'
main.c:(.text+0x71): undefined reference to `dlerror'
main.c:(.text+0x1ca): undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
$
任何人都可以告诉我出了什么问题吗?
答案 0 :(得分:6)
请参阅联机帮助页。对于Linux,您必须与Content-Encoding
链接才能使用动态链接功能。这有点麻烦,因为例如在FreeBSD上,它们是标准库的一部分。
BTW,链接要动态打开的库(在您的情况下为-ldl
)并不合理。