3

libfile2.so ( print2()関数定義を含む)という共有ライブラリがあります。ここで、libfile1.so (libfile2.so のprint2 () 関数を呼び出すprint1 ()関数定義を含む) を作成します。ここで、libfile1.soを動的にリンクしてprint1()を呼び出す main ()関数を含むmain.cファイルを作成します。

しかし、次のエラーが発生します。

./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_PATHlibfile1.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.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 に答える