我有一个共享库说 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
答案 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
中同时拨打了print2
和main.c
,请点击下面的libfile1.so
和libfile2.so
。
gcc -o main.o -c main.c
gcc -o main.exe main.o -L$YOUR_LIB_PATH -lfile1 -lfile2
因为在生成可执行文件时需要解析main.c中使用的所有符号。