ライブラリ A に依存するバイナリがライブラリ B に依存するシナリオがあります。
ライブラリ B に対してライブラリ A をビルドしましたが、ライブラリ B:s のシンボルがライブラリ A から漏れることはなく、すべてが cpp ファイルに含まれています。
バイナリで見つかったすべてのシンボルはライブラリ A で満たすことができるため、バイナリをライブラリ A に対してのみリンクしたいと考えています。これは可能ですか?
実際のアプリケーションでは、ライブラリ B はネットワーク プロトコルの実装であり、中間ライブラリにリンクする多数のバイナリがあります。また、使用されているさまざまなネットワーク プロトコルをバイナリに認識させたくありません。
プラットフォーム: Linux / GCC
コード:
liba/liba.h:
#ifndef LIBA_H
#define LIBA_H
int getANumber();
#endif
liba/liba.cpp:
#include "liba.h"
#include "../libb/libb.h"
int getANumber(){ return getBNumber(); }
libb/libb.h:
#ifndef LIBB_H
#define LIBB_H
int getBNumber();
#endif
libb/libb.cpp:
#include "libb.h"
int getBNumber(){ return 42; }
main.cpp:
#include "liba/liba.h"
#include <iostream>
int main(int argc, char** argv) {
std::cout << getANumber() << std::endl;
return 0;
}
コマンド:
~/libb/ $ g++ -shared -o libb.so libb.cpp
~/liba/ $ g++ -shared -o liba.so liba.cpp -L../libb -lb
~/ $ g++ -o main main.cpp -Lliba -la # fails
~/ # These two work, but I don't want to specify libb here.
~/ $ g++ -o main main.cpp -Lliba -la -Wl,-rpath-link,libb
~/ $ LD_LIBRARY_PATH=libb g++ -o main main.cpp -Lliba -la
これを解決する最善の方法は何ですか? プラグインとして作成する必要がありますか?
よろしく、 ダニエル