問題タブ [linker-flags]
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.
c++ - xcode 6 コンパイルの失敗 その他のリンカ フラグ ObjC
私は、もともと iOS5 用に開発されたかなり大規模なプロジェクトを維持する任務を負っています。
次のリンカ フラグがあります。-force_load -ObjC -lc++
プロジェクトをコンパイルしようとしたときに得られるもの:
ld: ファイルが見つかりません: -ObjC clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (呼び出しを確認するには -v を使用します)
これについて何か助けはありますか?これに関する任意のヘルプは大歓迎です
基本的
ios - インポートされたプロジェクトと競合する AWS SDK リンカー フラグ
AWS SDK フレームワークを使用してアプリを正常に作成しました。現在、静的ライブラリを自家製のフレームワークとしてインポートして、他のいくつかのプロジェクトとコードを共有しようとしています。
問題は、静的ライブラリをインポートするには、ライブラリをインポートするためにリンカー フラグを追加する必要がある-ObjC
のですが、そのリンカー フラグを追加するたびに、AWSが異常終了し、40 以上の赤いコンパイル エラーが発生することです。
私はリンカーフラグとライブラリのインポートにまったく慣れていないので、正直なところ、どこから始めればよいかわかりません。私はいくつかの調査を行いましたが、見つけることができる最良の手掛かりは、の-force_load
代わりに使用できる提案-ObjC
ですが、ビルドフェーズセクションにすべての「.m」ファイルを手動で追加する必要があるようで、私のライブラリにはそのようなものが何百も含まれていますファイル。
これらのファイルをすべて追加して使用できるようにするよりも、この問題に対するより簡単な解決策はあります-force_load
か? AWK SDK とライブラリをインポートする必要性をうまく連携させるにはどうすればよいですか?
編集:-ObjC
コメントの提案から、リンカー フラグを追加するときに発生するエラーを次に示します。そのフラグがなくても (静的ライブラリを追加しなくても)、アプリはAWSiOSSDKv2
フレームワークで正常にコンパイルされます。しかし、そのリンカーフラグを追加すると(私が理解しているように、静的ライブラリには必要ですが、そのライブラリを追加する前でも)、すぐに次のようになります。
[文字制限内に収まるようにコードを削除]
EDIT 2:松田陽介の回答に基づいて、libsqlite3.dylib
欠落していた を追加しました。以前のエラーは消えましたが、数十 (数百?) の「重複シンボル」行があり、1 つの赤い「リンカー コマンドが終了コード 1 で失敗しました」というエラーで終わります。(私はそれらすべてを含めますが、面白いことに、彼らは私の投稿を 73,111 文字にして、30,000 文字の制限をはるかに超えています。)
面白いことに、それらはフレームワーク自体の要件によって引き起こされた競合に起因しているようです (たとえば、AWSCore
AWS フレームワークではBolts
フレームワークが必要ですが、重複したシンボルの束と競合しているように見えますか?)。
また、以前と同様に、-ObjC
リンカー フラグから削除するだけで、アプリを正常に正常にコンパイルできます。
c++ - Gcc は、含まれている静的ライブラリからのシンボルの可視性を隠します
私は持っている:
- 共有ライブラリ、たとえばlibShared.so
Bar
、メソッドを含む class を含むint Bar::do(int d) const
- メソッドを持つクラスを含む静的ライブラリ、例えばlibStatic.a。
Foo
int Foo::act(int a) const
のコードBar
は次のようなものです。
libShared.soはフラグ-fvisibility=hiddenでコンパイルされます。
問題は次のとおりです。Linux コマンドnm -g -D -C --defined-only libShared.soを実行すると、クラスFooとそのメソッドがlibShared.soの外に表示されます。 「パブリック」としてマークされているものを除くすべてを非表示にするコンパイラ(実際には、それらはnmによって「T」としてマークされています)。
どうすればこれを回避できますか? libShared.soがその依存関係から来るシンボルを公開しないようにします。
ありがとう
c - 定義されたシンボルにも linker -wrap フラグを使用できるようにする
リンカーの「-wrap」フラグは、未定義のシンボルに対してのみ機能することを読みました。これにより、同じファイル内の関数呼び出しに対して正しく機能しません。
「-wrap」を既知のシンボルで機能させる方法はありますか? または、コンパイラに特定の/すべてのシンボルを未定義としてマークさせます(それらは同じファイルにありますが)?
コメントにより編集:
例えば:
代わりに、関数 foo() へのすべての呼び出しが __wrap_foo に移動するようにします。したがって、フラグ -Wl,-wrap,foo をリンカーに追加しました。foo が定義されているファイルとは異なるファイルから呼び出された場合、問題なく動作します。ただし、同じファイル内から呼び出された場合、ラッパーは呼び出されません
gcc - gcc: エラー: 認識されないオプション --wrap
[更新] トップの投稿で申し訳ありませんが、問題が変わる可能性があるため、最初にこれを知っておくと役立つ場合があります。
これ--wrap
はリンカのオプションであり、リンカのオプションではありld
ませんgcc
。
しかし、私のEclipseプロジェクトはgcc
リンク段階に使用しています。
cmocka
単体テストの必要に応じて、ラップ関数を使用するにはどうすればよいですか?
を使用してgcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
います。
cmockaを使用して C コードの単体テストを行うために、ここ--wrap
で指定されているリンカー オプションを使用しようとしています。
エラーは
そのため、リンカーはオプションについて不平を言ってい--wrap=add
ますが、その理由はわかりません。
必然的に、コードを投稿しないと、誰かがそれを要求するので、リンカー オプションの問題との関連性が疑わしいとはいえ、ここに掲載します。
私の単体テストのメインでは、
別のファイルで、モック関数を宣言します
そして、テスト対象のソフトウェアでは、ラップされる関数が呼び出されます
add()
ビルドのどこにも関数が呼び出されないことに注意してください。私が達成しようとしているのは、__wrap_add
リンカー オプションを使用してその関数をモックすることです。リンカがそれを拒否するのはなぜですか?
ios - Parse.com Project iOS Swift で Google Maps SDK を使用する
Parse SDK (parse.com) を使用してデータを処理するプロジェクト (xcode 6.3+、swift) に取り組んでいます。最近、Google マップ SDK を使用して、方向 API を使用してユーザーに方向を提供することにしました。GoogleマップなしでこのAPIを使用できるので、統合を開始しました。ココアポッドは初めてなので、指示に従って遊び始めました。
pod init
ポッド仕様ファイルを作成するには
これがGoogleスターティングガイドからの私の設定です
pod install
を使用してプロジェクトを起動します。.xworkspace
プロジェクトを直接ビルドしようとすると、34 個のエラーが返されます。エラーのタイプは常に同じです。Apple Match-O Linker Error
それで、空のプロジェクトで同じことをしたので、グーグルを見始めましたが、すべてがうまく機能していました。
Parse SDK を使用すると、GoogleMaps が動作するために必要な -ObjC リンカー フラグと競合するという事実に関する情報を見つけ始めました。答えのほとんどは、2 つの潜在的な解決策を示しています。
1. Facebook-iOS-SDK フレームワークを追加する
Facebookが提供するフレームワークとcocoapodsを使用してこれを試しました。動作していません。それでもエラーが発生しました。
2. -ObjC フラグを次のように置き換えて、GoogleMaps フレームワークを強制的にロードします。
だから今、私はこれを解決する方法についてかなり迷っています。GoogleMaps SDK を Parse と統合する方法を見つけた人はいますか?
アップデート
cocoapods なしで GoogleMaps を挿入することで、別のアプローチを試みました。これを行うには、次の方法を使用しました: GoogleMaps without CocoaPods
適切に統合されているように見えますが、-ObjC フラグが残っています。使用する
は現在応答していますが、duplicate symbols for architecture x86_64
エラーが発生しています。それを修正する方法を見つけることができないようです。
python - C++ の静的リンクと動的リンクの混合 (Msys2 Qt)
非常にうまく機能する Qt/C++ プログラムの開発に MSyS2 を使用しています。Python(コード内で使用)が静的ライブラリ(共有ライブラリのみ)を提供しないため、静的リンクが機能しないという問題に遭遇しました。リンカー スイッチを含む作成されたメイクファイルまでエラーを追跡しました。
私はそれを削除して追加することを理解しました
私が望むことをします:Python部分を除くすべてを静的にリンクします。問題は、プロジェクトの qmake を再実行するとすぐに変更が上書きされることです。「-static」を取り除く解決策が見つかりませんでした.qmakeによって追加されたようで、.proファイルでは削除できません。
「-static」スイッチを取り除く解決策はありますか?
残念ながら機能しません:-(。
Win7 Pro 64 ビット、Qt5.5、Mingw GCC 5.3.0、Python 3.5.0
c++ - リンク フラグを自分の conan パッケージのユーザーから隠すことはできますか?
OpenGL を使用するconanにパッケージとしてアップロードされたライブラリがありGL
、CMakeLists.txt
. ライブラリのユーザーは、再度 GL に対して明示的にリンクする必要がありますか? コナンはそれを追跡して に含める方法を提供してい${CONAN_LIBS}
ますか?
私がドキュメントで見つけた最も近いものは methodpackage_info
です。リンカーの追加オプションを指定できるようですが、私のライブラリの で適切に使用していないようですconanfile.py
。私はすべてを試しました:
しかし、ユーザー コードでリンク フラグを設定しないと、GL のメソッドへの「未定義の参照」が発生します。
編集: Linux mint 17 で作業しています。