3

我有一个共享库说libfile2.so(其中包含print2()函数定义)。现在我创建了一个libfile1.so(其中包含print1()函数定义,该定义又调用libfile2.so 中的print2()函数)。现在我创建一个包含main()函数的main.c文件,该函数通过动态链接 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
4

1 回答 1

4

如果您只print1在您的main.c. libfile2.so然后在中设置路径LD_LIBRARY_PATH。因为它会尝试查找libfile1.sowhile 与 链接时的依赖关系main.c

gcc -o file1.o -c file.c
gcc -o file2.o -c file.c
gcc -o libfile2.so file2.o -shared
gcc -o libfile1.so file1.o -L. -lfile2 -shared
gcc -o main.o -c main.c
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
gcc -o main.exe main.o -L. -lfile1 

如果您同时调用了两者print1,然后链接两者,如下所示print2main.clibfile1.solibfile2.so

gcc -o main.o -c main.c
gcc -o main.exe main.o -L$YOUR_LIB_PATH -lfile1 -lfile2

因为 main.c 中使用的所有符号都需要在生成可执行文件时解析。

于 2013-01-09T11:09:07.710 回答