問題タブ [unix-ar]
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++ - 静的ライブラリを他の静的ライブラリとリンクする
XML を処理する必要がある静的ライブラリを作成しています。すぐに必要なものをすべて含めたいのですが、他の静的ライブラリ、つまり libxml2 をリンクさせる方法がわかりません。
-c
フラグを gccに渡して生成.o
し、ar
それを使用して lib を作成します。静的ライブラリに libxml2 を飲み込ませるには、どのマジック フラグの組み合わせを渡す必要がありますか?
c++ - リンクされているアーキテクチャではないアーカイブ用に構築された静的ライブラリ (x86_64)
2 つの異なるプログラムをコンパイルしようとすると、同じような問題が発生します。それぞれが最初に静的ライブラリを作成し、次にそのライブラリをリンクするメイン アプリケーションを作成します。私は gcc 4.7.2 で Mac OS Mavericks に取り組んでいます。
プログラム 1
これは私が実行したときに起こっていることですmake
:
まず、ライブラリlibfeat.a
が作成されますが、次の警告が表示されます。
次に、アプリケーションをコンパイルすると、同じアーキテクチャ (x86_64) 用にビルドされていないため、ライブラリを使用できないと表示されます。
を実行するlipo
と、次のようになります。
プログラム 2
同じことを行う別のプログラムで同じ問題が発生しています。最初にライブラリを作成し、後で使用します。
これは、lib を作成するときの出力です。
これはアプリケーションです:
この場合、lipo
ライブラリのアーキテクチャが x86_64 であることがわかります。
どうしたの?
c - 静的ライブラリに対するコンパイルの問題
libstuff.a
と を使用して、静的ライブラリ を作成しましgcc
たar
。ライブラリを/custom/lib/dir/
に、ヘッダー ファイルを にインストールしました/custom/include/dir/
。アーカイブに対して別のアプリケーションをコンパイルしようとすると、問題が発生します。
私がコンパイルしようとしているアプリケーションは、基本的にgcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff
.
コンパイルしようとすると、 で宣言してstuff.h
で定義した関数に関するエラーが発生しますstuff.c
。
libstuff.a
コンパイラから削除すると/custom/lib/dir/
、苦情が発生し/usr/bin/ld: cannot find -lstuff
ます。私がそれを元に戻せば、それは文句を言いません。したがって、アーカイブを正しく見つけています。
#include "stuff.h"
gccからコード行を削除すると、未定義であるとmain.c
不平を言うstuff_init
ので、ヘッダーを正しく見つけています。
を実行するnm libstuff.a
と、出力に0000000000000000 T stuff_init
. したがって、関数はアーカイブ ファイルで定義されます。
それで、私は何を間違っていますか?
c++ - リンクされたオブジェクトからのグローバル シンボルの範囲を制限する
アーカイブ ファイルに C ライブラリがありますclib.a
。そのための C++ ラッパーを作成しました。cpp.o
これをスタティック ライブラリとして使用したいと考えています。
これにリンクするコードはclib.a
、正しいヘッダーが含まれていない限り、からのものを直接使用することはできません。しかし、誰かが偶然に適切なプロトタイプを作成した場合、たとえば、 のどの定義が適用される かvoid myCoincidentallyNamedGlobalFunction()
心配です。myCoincidentallyNamedGlobalFunction
からのシンボルは でclib.a
のみアクセスする必要があり、cpp.o
にリンクされてcppwrap.a
いるものではないため、衝突の可能性がないようにそれらを完全に非表示にする方法はありますか (したがって、clib ヘッダーを含めても失敗します)。
c - ar: crs: そのようなファイルまたはディレクトリはありません
SCIP 最適化スイート バージョン 3.1.0 をインストールしようとしています
http://scip.zib.de/download.php?fname=scipoptsuite-3.1.0.tgz
ソフトウェアは、scipoptsuite-3.1.0 ディレクトリで「make」コマンドを入力してコンパイルされます。このパッケージには、3 つの構成パッケージ (SCIP、soplex、および zimpl) が含まれています。一般的なパッケージ (scipoptsuite) 用の makefile と、3 つの構成パッケージ用の makefile があります。zimplのコンパイルに関しては、私は大きな困難を抱えています。
zimpl makefile 内のコードを使用してコンパイルしようとすると、エラーが発生します。ライブラリを生成し、そのライブラリ内にオブジェクト ファイルを格納しようとしています。
ここで、問題に関連するコードの一部を提供します。
主な定義を次に示します。
そして、エラーの原因となるコードの重要な部分は次のとおりです。
次のエラー メッセージが生成されます。
特に、そのコード セグメント内の次の行に注目していただきたいと思います。
その行の「crs」の側面が何を指しているのか、あるいはエラーが生成される理由さえまったくわかりません。この問題に関する助けをいただければ幸いです。この時点で本当に困惑しています。
c - clang リンカを使用した C アーカイブ (ライブラリ) の基本的な使用法
メインプログラムがあります:
foo.c
変数 の私の定義を含む別のファイルa
:
私がこのように構築した場合:
すべては順調です。しかし、私が次のことをすると:
わからないという警告が出ます
ライブラリをチェックして、シンボルがそこにあることを確認します
そして、私はします
次のエラーが表示されます
私は何を取りこぼしたか?