我有一个共享库说libfile2.so(其中包含print2()函数定义)。现在我创建一个libfile1.so(其中包含print1()函数定义,然后在libfile2.so中调用print2()函数)。现在我创建一个main.c文件,其中包含main()函数,它通过动态链接libfile1.so调用print1()。函数在一个共享库中调用另一个共享库中的函数
但我收到以下错误:
./libfile1.so: undefined reference to `print2'**
以下是我使用的命令:
gcc -c -fpic file1.c
gcc -shared -o libfile1.so file1.o
gcc -c -fpic file2.c
gcc -shared -o libfile2.so file2.o
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
gcc -I. -L. -o main main.c -lfile1
您应该显示(a)用于构建'file1.so'的命令行和(b)用于构建可执行文件的命令行。两者都是相关的,因为您可能已经将(file1.so)需要'file2.so'的信息构建到'file1.so'中并且答案(a),并且无论如何,都有办法避免( b)。请注意,一个共享库(例如'file2.so')中的函数调用另一个共享库(例如'libc.so')中的函数是正常的。或者考虑使用'libc.so'的'libncurses.so';等等。 –
我将main.c链接到包含print1()的定义的libfile1.so,但print1()调用其定义在libfile2.so中的print2()。 – Sunil
您应该编辑您的问题以包含该信息,并且应该完整显示命令行。另外,你的问题讨论'file1.so';你的评论讨论'libfile1.so'。命名约定有很多不同之处。 'lib'前缀允许在链接器命令行上使用'-lfile1'表示法。没有这个前缀,你不能使用简写;您必须指定链接线上共享对象的路径。在评论中还提到了动态加载的答案。这也应该是问题的一部分;它也改变了很多东西。 –