sscanf
を使用する静的Cライブラリlibex.a
があります。少し周り突っついた後__isoc99_sscanfへの未定義参照
lib/libex.a(srcfile.o): In function `my_function':
/srcpath/srcfile.c:215: undefined reference to `__isoc99_sscanf'
、私が発見した:ライブラリは、私は-std=c++11
を使用してコンパイルしていますいくつかのC++のコードでライブラリ関数を使用したいが、私は次のエラーを取得する-std=c99
を使用してコンパイルされましたsscanf
には後方互換性ハックのためにバージョンに問題があるため、__isoc99_sscanf
へのリダイレクトが問題の原因であると思われます。しかし、私はglibc
のバージョンをチェックしましたが、解決策が他の場所で提案されているほど近かったようです(glibc
のコピーを少なくとも2.7に更新するのは役に立ちません)。
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
お勧めはありますか?
もちろん、関連する追加情報がある場合はお知らせください。
ありがとうございます!
更新:libex.a
を-D_GNU_SOURCE
とコンパイルすると、エラーメッセージはundefined reference to sscanf
に変更されます。それが間違っていることを理解するのに役立つかどうかは分かりません。
C++コンパイラの 'mangles'関数名。 C言語で作成されたライブラリには、関数名が変更されていません。あなたのC++ソースコードにはどのようなヘッダファイルが含まれていますか? C言語のヘッダーには必要な 'extern" c "{...ラッパーがありますか? C++で使うことができますか? – user3629249
はい。すべてのヘッダーはextern "C"で囲まれています – EJane
最小限のコード例を作成し、ライブラリとC++プログラムの正確なビルドコマンドを指定すると助けになります –