静的ライブラリの一部を、Linuxでg ++を使ってC++で書かれたプログラムにリンクしようとしています。C++静的ライブラリの必要な部分のみをリンクする
my_lib.h
#ifdef USE_EXTERN_LIB
# include <extern_lib.h>
void do_something (struct extern_lib);
#endif
void do_other (int);
my_lib.c
#include "my_lib.h"
#ifdef USE_EXTERN_LIB
void do_something (struct extern_lib l)
{
// do something
}
#endif
void do_other (int a)
{
// do something
}
私は静的にそれにすべてを含めるように-DUSE_EXTERN_LIBプリプロセッサフラグでlibmy_lib.aを作成しています。
が、私は何をしたい二つのプログラムを作成することです:* extern_libでこのライブラリを使用しています1 *と* extern_libの*なしでそれを使用する1、すなわち:
g++ -L/path/to/lib -lmy_lib -o prog_wihtout_lib prog_without_lib.cc
g++ -DUSE_EXTERN_LIB -L/path/to/lib -lmy_lib -o prog_with_lib prog_with_lib.cc
、第2のプログラムのコンパイルではなく、最初に、extern_libが宣言されていないと言います。
動的ライブラリでは、実行時にシンボルがロードされるので問題はありませんが、静的ライブラリが必要です。 静的ライブラリのモジュールのみをリンクする方法はありますか?
EDIT
prog_without_lib.cc
#include "my_lib.h"
int main()
{
do_other (42);
return 0;
}
prog_with_lib.cc
#include "my_lib.h"
int main()
{
do_other (42);
struct extern_lib l;
do_something (l);
return 0;
}
感謝。
「第2の」コンパイルの正確なエラーを教えてください。 'USE_EXTERN_LIB'が定義された2番目の手段を仮定します。 – David
my_lib.cの '#include" my_lib.h "は? – hmjd
申し訳ありませんが、それはあなたがprog_without_lib.ccソースを投稿することができ – marmottus