6

これは少し恥ずかしいです。何が起こっているのかはわかっていますが、理由はわかりません。「未定義の参照先」エラーが発生します。これは、リンカー(ld)が作成したライブラリのコードを配置していないことを意味します。

私は現在、ZedA.Shawの「LearnCtheHardWay」コースをいじっています。演習32を終了しようとしていますが、同じエラーが発生し続けます。

この本では、次のコマンドを実行するmakeファイルを開発します。

cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG  build/liblcthw.a \
    tests/list_tests.c   -o tests/list_tests

ここで、-gはデバッグ情報を有効にする、-Wallは「すべての」警告を有効にする、-Wextraはさらに警告を有効にする、-Isrcはライブラリディレクトリにsrcディレクトリを含める、-o tests/list_testsはそれを使用して出力を生成するそのディレクトリに名前を付け、コードから変数を有効にするための-DNDEBUG、レベル2の最適化のための-O2(それが意味するものは何でも)、そのライブラリ(ビルドを取得しているライブラリ)を含めるためのbuild/liblcthw.a。残りは彼らが何をしているのか分かりません。

正しく理解できれば、srcディレクトリにオブジェクトlist.oを作成するlist.cがあります。このオブジェクトは、後でarとranlibを介してlibに含まれます。したがって、ヘッダーlist.hを呼び出すと、ldがbuild/liblcthw.aでlist.oを検索するようになります。ldは、何らかの理由でbuild/liblcthw.aを読み取っていません。だから私はこの未定義のエラーへの参照を取得します。

私はゼッドに連絡しようとしましたが、彼はどうやら忙しい人です。だから私はここで助けを得たいと思っています。問題についてさらに情報を追加する必要があるかどうか教えてください。これまでのライブラリ全体へのリンクは次のとおりです

誰かが私を助けてくれることを願っています。

4

2 に答える 2

6

次は機能しますか?

cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG tests / list_tests.c \
   -o tests / list_tests -Lbuild -llcthw

これは-l、ライブラリに対してリンクするオプションと-L、リンカがライブラリを検索する追加のディレクトリを指定するオプションを使用します。libプレフィックスとサフィックスを引数に指定することは.aできません。-l

「build」ディレクトリに共有ライブラリ(* .so)もある場合は、状況が複雑になることに注意してください。簡単にするために、「liblcthw.so」ファイルを削除して「liblcthw.a」のみを保持するか、元のように静的ライブラリを入力としてリストしてリンクインするか、指定してください。ソースファイルの後:

cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG tests / list_tests.c \
   -o tests / list_tests build / liblcthw.a
于 2013-02-25T04:03:55.447 に答える
0

あなたは単に書くことができます

$ gcc -Isrc filename.c -o anyname.o /path/to/direc/archivefile/stored/archivedfile.a

-ldが返されたというエラーが発生したときにこれを実行しました

于 2019-02-01T11:51:02.787 に答える