2016-08-31 15 views
4

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に変更されます。それが間違っていることを理解するのに役立つかどうかは分かりません。

+0

C++コンパイラの 'mangles'関数名。 C言語で作成されたライブラリには、関数名が変更されていません。あなたのC++ソースコードにはどのようなヘッダファイルが含まれていますか? C言語のヘッダーには必要な 'extern" c "{...ラッパーがありますか? C++で使うことができますか? – user3629249

+0

はい。すべてのヘッダーはextern "C"で囲まれています – EJane

+1

最小限のコード例を作成し、ライブラリとC++プログラムの正確なビルドコマンドを指定すると助けになります –

答えて

0

誰がこの問題に遭遇した場合には:

MakefileをC++コードの標準ライブラリを無効とフラグ-nostdlib -nodefaultlibs -nostartfilesを使用してファイルを起動します。インテルSGX SDKに含まれるstdio.hのバージョンにリンクして、内部のエンクレーブを実行します。そのバージョンはsscanfを推奨しません。

関連する問題