1

私はばかげた初心者です。

関数my_putstr(char *)およびmy_strlen(char *)を持つfile.cという名前のファイルがあります

my_putstr()は、write()(unistd.h)を使用してパラメーターを書き込みます

file.cからライブラリを作成したかったので、次のようにしました。

gcc -fPIC -c file.c
gcc -shared -o libfile.so file.o

次に、main.cファイルを作成し、そこからmy_putstr()を呼び出しました。.soをコンパイルしてリンクしようとしました

gcc -L. -lfile main.c -o test

しかし、my_putstr()への未定義の参照を取得しました

my_putstr()とmy_strlen()を含む.hを作成し、それをメインに含めようとしましたが、同じエラーが発生しました。

愚かな質問でごめんなさい。

Havaniceday。

4

1 に答える 1

1

あなたの質問には情報が不足していますが、最初に試してみることをお勧めします

gcc main.c ./libfile.so -Wl,-rpath . -o test

これが失敗する場合は、ソースに問題があります。この時点ですべて問題ない場合は、試してください

gcc main.c -L . -lfile -Wl,-rpath . -o test

これが未定義の参照を出力する場合、おそらく、lib パスに my_putstr (以前の実験からのものである可能性があります) のない libfile.a のようなものが既にあるでしょう。

すべてが問題ない場合、リンカーはコマンド文字列に提供されるライブラリの順序に敏感であり、ライブラリは常にこのライブラリを使用するオブジェクトの後に来ることを覚えておく必要があります。

于 2013-01-29T07:18:44.830 に答える