函数在一个共享库中调用另一个共享库中的函数

时间:2013-01-09 10:49:12

标签: c shared-libraries

我有一个共享库说 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

1 个答案:

答案 0 :(得分:3)

如果您在print1中仅调用main.c。然后在libfile2.so中设置LD_LIBRARY_PATH的路径。因为它会在与libfile1.so链接时尝试查找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.c,请点击下面的libfile1.solibfile2.so

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

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