コードを頻繁に使用するため、コードの静的ライブラリが必要であるという問題があります。それは c++ です (それ以外の場合は、共有が別の選択肢になります)。しかし、そのコードは他の静的ライブラリに依存しています。そのため、静的ライブラリを他のライブラリにリンクできないようになりました。How to merge two "ar" static libraries into oneを見つけました。そのため、テストを試みましたが、うまくいかず、その理由と正しい方法を知りたいです。
それぞれにヘッダー(リンクされていませんが実装用)と単純な関数を持つそのソースが何かを返す2つの静的ライブラリがあります。lib1 には関数があり、lib2 には lib1 に依存する関数があり、lib1 と lib2 をリンクすると、実行可能ファイル 3.exe がリンク エラーになります。lib1 の関数は参照されません。リンクの内容を使用して、ライブラリのすべてのオブジェクトを抽出し、それを出力ライブラリにすばやく追加するバッチスクリプトを自分で作成しました。
@ECHO OFF
SET ar="C:\Programme\CodeBlocks\MinGW\bin\ar.exe"
FOR %%i IN (%1) DO SET SPath=%%~di%%~pi
cd \
cd D:
cd %SPath%
SET output="%SPath%output.a"
del %output%
:top
IF (%1) == () GOTO end
del "%SPath%*.o"
ar x %1
ar q %output% *.o
SHIFT
GOTO top
:end
del *.o
ar t %output%
script.bat libtest1.a libtest2.a
その出力は信頼できるように見えます:
D:\
D:\CodeBlocks Workspace\lib test\*.o konnte nicht gefunden werden
ar: creating D:\CodeBlocks Workspace\lib test\output.a
main1.o
main2.o
lib1 と lib2 の代わりに、出力にリンクしましたが、それでも lib1 の関数は参照されません。
じゃあ何をすればいいの ?コード全体を常に含めたくありません。