問題タブ [undefined-symbol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
638 参照

linux - Linux でコンパイルされたプログラムを macOS に移植するときに未定義のシンボルを取得する

もともと Linux OS で書かれたプログラムを MAC OSX でコンパイルしようとしています。これは、いくつかのメイクファイルを含む大きなプログラムです。私は何週間もそれに取り組んできましたが、未定義のシンボルエラーを引き起こしている理由を理解できないようです. コンパイルの順序が正しくなるように、他のメイクファイルを呼び出す包括的な Makefile が 1 つあります。

コンパイルすると、静的ライブラリと複数のアプリケーションが作成されます。この人たちは非常に巨大であるため、プログラムはこれらの静的ライブラリ (.a ファイル) を最初に作成します。次に、アプリケーション専用のソース コードをコンパイルするときに、静的ライブラリをリンクします。(あまり混乱しないことを願っています) .

静的ライブラリのビルドは問題なく完了できますが、アプリケーションがビルドされる時点に到達すると、大量の未定義シンボル エラーが表示されます。たとえば、

未定義のシンボル: "_bagUpdateOptSurface"、参照元: libdbdbv6.a(dbv_bag.o) の _dbv_bag

nm で dbv_bag.o をチェックすると、ヘッダー U で定義されていない多くの関数が表示されます。

この関数を nm でトレースバックして、それを見つけることができます...

bagUpdateOptSurface.c -->bagUpdateOptSurface.o -->libbag.a --->dbv_bag.c --->dbv_bag.o --->libdbdv6.a --->application

関数はヘッダー T を持つスタティック ライブラリ libbag.a で定義されていますが、オブジェクト ファイル dbb_bag.o では U で未定義として定義されています。どこかで情報が失われ、その理由を理解できないようです。

プログラムを Mac に移植する経験が豊富な誰かが、何が起こっているのかを明らかにするのに役立つなら、私は非常に感謝しています。正しいまたは間違っているアイデアは大歓迎です。

前もって感謝します

0 投票する
0 に答える
263 参照

ios - LibEtPan / iOS: シンボルが見つかりません…

メール クライアントのバックエンドとして LibEtPan を使用しようとしました。https://github.com/dinhviethoa/libetpanからソース コードをダウンロードし、https ://github.com/bindle/iOSPortsから追加のライブラリもダウンロードしました。LibEtPan build-mac/update.sh を実行し、libetpan.xcodeproj と openldap.xcodeproj、openssl.xcodeproj、Cyrus SASL.xcodeproj をプロジェクトに追加しました。

次のターゲット依存関係を設定します。libetpan ios (libetpan), lber (openldap), ldap (openldap), crypto (openssl), ssl (openssl), sasl2 (Cyrus SASL) and I Linked Binary With Libraries: libetpan-ios.a, libiconv.dylib, liblber.a, libldap.a, libcrypto.a, libsasl2, libssl.a

しかし、mailimap_new のようなものを呼び出すとすぐに、エラー メッセージが表示されます。

(armv7 または他のアーキテクチャと同じ)

追加でどのライブラリを含める必要があるかわかりません。

0 投票する
1 に答える
4157 参照

c - 共有ライブラリをロードできません: 未定義のシンボル

Linux(ubuntu)システムにプラグイン(動的共有ライブラリ)を使用した独自のプログラムがあります。私のライブラリ (プラグイン) は OpenCV を使用しています (あまり重要ではないかもしれません)。

私のプラグインは /usr/local/lib/mysoft/ にあります。

ライブラリを使用してもプログラムを正常にコンパイルし、正常にインストールされたので、この時点まではすべて問題ないようです。

プログラムを実行すると、構成ファイルに基づいてこれらのライブラリの束が読み込まれます。正常にロードされたライブラリがいくつかありますが、1 つのライブラリをロードできません。ロード時にエラーが発生します(ライブラリを開くために dlopen() を使用しました):

OpenCV の一部である cv::resize を見つけるには明らかにいくつかの問題がありますが、その理由はわかりません。

次のことを確認しました。

  • OpenCV は、他のライブラリも同様に使用し、問題なくロードされるため、おそらく正しくインストールされています。
  • 私のプログラム、libMyPlugin2.soまたはOpenCVの依存関係はありません(lddでチェック)
  • すべてのライブラリとバイナリのアーキテクチャは同じようです (objdump -f で確認しました)

誰かが私が間違っていることを知っていますか?

この投稿は非常に関連性があるようですが、それでも役に立ちませんでした: Linux shared library that uses a shared library undefined symbol

0 投票する
1 に答える
1155 参照

macos - RtAudio をコンパイルしようとしたときの未定義のシンボル

RtAudio と RtMidi を一緒に使用しようとしています。同じフォルダーに、RtAudio.cpp、RtAudio.h、RtHelper.h、RtMidi.cpp、および RtMidi.h と、2 つのテスト プログラム、midiprobe.cpp および audioprobe.cpp があります。

デフォルトのコマンドで midiprobe をコンパイルすると機能しますが、 RtAudioをテストするために audioprobe で同じことをしようとすると、エラーが発生します。

コンパイルに使用するものは次のとおりです。

そして、これらはエラーです:

私はこの種のものにはまったく慣れておらず(ほとんどの場合、これまでフレームワークが既製でした)、まだこれを理解できていません。これはデフォルトの例なので、次に何をすべきか本当に迷っています... ありがとうございます。

0 投票する
2 に答える
517 参照

c++ - ブースト スレッド デストラクタの未定義シンボル

OSX Mountain Lion を使用しています。ブースト Web サイト ( http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html ) から提供された手順を使用して、ブースト 1.52.0 をダウンロードし、解凍し、ビルドしました。デフォルトのインストール プレフィックスを のままにしました。/usr/localこれは、ライブラリが にインストールされ/usr/local/lib、ヘッダー ファイルが にあることを意味します/usr/local/include。ライブラリとヘッダーがそこに存在し、最近変更されたことを確認しました。

ここにあるブースト非同期 I/O の例をコンパイルしようとしています: http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/tutorial/tuttimer5/src.html (ソース)。

これが私のコンパイルコマンドです:

ここで、src/test1.cpp はサンプル ソース ファイルです。これが私のリンクコマンド(およびエラー)です:

Apple の clang++ 4.0 と g++ 4.6.0 の両方を使用してみました。両方のプログラムから同じ未定義シンボル エラーが発生します。

他の人も、このコード サンプルのコンパイルに問題を抱えているようです。私はこの質問を認識しています: C++ / Boost: Undefined Symbols in example? そしてこれ:boost.asioの例をコンパイルするときのリンカエラー。ただし、これらの問題はそれぞれ、適切なスイッチ (-lboost_thread および -lboost_system) をコマンド ラインに追加することで修正されたようです。私はすでにそれらを持っています。-lpthread を追加しようとしましたが、うまくいきませんでした。

私の質問を見てくれてありがとう!どんな助けでも大歓迎です。:)

0 投票する
1 に答える
3053 参照

ios - アーキテクチャarmv7のiOSリンカーエラーのGoogleコンバージョントラッキング

iOS用のGoogleコンバージョントラッキング機能をiPhoneアプリに追加しようとしています。アプリのベースSDKはiOS6で、アプリの有効なアーキテクチャはarmv7、armv7sはアプリのiOS展開ターゲットが4.3です。最新のxcode4.5.2とOSX10.8.2を使用しています。

アプリはアプリストアにあり、iPhone3-4-5で問題ありません

このリンクをたどってiOS用のGoogleコンバージョントラッキングを追加しようとすると、https://developers.google.com/mobile-ads-sdk/docs/admob/conversion-tracking

このエラーがあります:

0 投票する
1 に答える
1029 参照

segmentation-fault - リンクに問題があるため、プログラムが実行されていません

バイナリの実行に問題があります。プログラムがセグメンテーション違反を受信して​​います。フィルタリングは gdb の出力です

次に、nmユーティリティを使用しました

多くのシンボルが未定義であることがわかりました。この a.out バイナリは、実際には他の多くの .so をリンクすることによって取得されます。.soの1つでnmを実行しました

このプログラムは、上記の libmylib.so とリンクされています。リンク中にエラーは発生しません。

ただし、-shared オプションがないと、次のエラーが発生します。

何が問題なのですか?これを克服する方法を教えてもらえますか?前もって感謝します

0 投票する
2 に答える
190 参照

python - カスケードされたライブラリの依存関係

ここで説明するには長すぎる理由から、Python内で呼び出し可能な共有ライブラリ(libAと呼びます)を「C」で作成する必要があります。この共有ライブラリは、別のカスタム共有ライブラリを呼び出す必要があります(libCudaという名前を付けます)。さらに、libAは、MySQLなどの他の多くの外部共有ライブラリを呼び出します。

libCudaを含める前は、Python内で呼び出されたすべてのC関数は問題なく機能し、MySQLサブ呼び出しは正常に機能していました。ただし、libCudaがlibAに追加されると、Pythonは次のように文句を言います。

ご想像のとおり、libCudaはnvccでコンパイルされたnVidia Cudaコードであり、Cリンク可能に設定されています(つまり、関数プロトコルで「C」をエクスポートします)。この共有ライブラリ(libCuda)をスタンドアロンのテストベンチ(記述)でテストしました。 C)で、すべてが期待どおりに機能します。これは、Cudaライブラリをコンパイルするために使用される命令です。

私が使用する場合:

libAがlibCuda(またはMySQL)をロードする必要があることを示す情報が表示されません

libAのコンパイルに使用されるコマンドは次のとおりです(libCudaはローカルディレクトリにあります)。

両方のライブラリファイルを/usr/ libに配置し、LD_LIBRARY_PATHを明示的にエクスポートしてみました。運がない。どんな助けでも大歓迎です!

0 投票する
1 に答える
1671 参照

c++ - ブースト ライブラリをプロジェクトに接続できない「シンボル ルックアップ エラー」

次のような状況があります。

動的ライブラリ lib.so を作成しました。このライブラリは、別のスタティック ライブラリ lib.a を使用します。どちらもBoostライブラリを使用しています(CMakeファイルでリンクしています)。(私はJavaプロジェクトでこの動的ライブラリを使用しています)

これは、lib.a から getFilesFromDirectory() を呼び出す、lib.so 内の file.cpp のコードです。

これは、lib.a からの getFilesFromDirectory() のコードです。

しかし、私のプロジェクトが lib.so ライブラリを呼び出すと、次のメッセージが表示されます。

私が知ったように、ブーストメソッド「パス」を呼び出そうとすると、lib.aでクラッシュします。しかし、私はすべてのブースト ヘッダーを宣言し、それらを CMake ファイルにリンクしました。ブーストメソッドを認識しない理由を説明できますか?

編集

私のコンパイラのバージョン gcc 4.6. 4.5 を使用すれば、すべて問題ありません。

また、lib.so の file.cpp でいくつかのブースト メソッドを直接使用すると、すべて正常に動作します。次に例を示します。

しかし

}

コンパイラのこの動作をどのように説明できますか?

実行時にエラーが発生することに注意してください。

解決した

問題は、CMake ファイルの *target_link_libraries* のライブラリの順序でした。

違う:

右:

0 投票する
1 に答える
807 参照

c++ - Lua: C++ モジュールは相互に参照できません、未定義のシンボル

エミュレーターの一部として、CPU と SaveState の 2 つのモジュール (共有オブジェクト) を作成しました。どちらも独立して .so 個別のファイルにコンパイルされ、require(); を使用して Lua スクリプトによって実行時にロードされます。すなわち:

CPU 内には、SaveState で動作するメソッドがあります。

正常にコンパイルされますが、次のrequire("CPU")行は失敗します。

を使用するnm -Dと、savestate.so でその正確なシンボルを確認できますが、実行時には何らかの理由で表示されません。