これは、Tizen Studio で開発された Tizen プロジェクト用です。
すべて同じ名前空間にあるいくつかの c++ クラスを実装するライブラリ (.so) を開発しました。私が今持っている質問は、lib 内のクラスにどのようにアクセスするかです。
簡単な例:
mylibclasses.cpp:
namespace myspace{
class EXPORT_API myclass{
public:
myclass(){};
~myclass(){};
void myfunc(){};
}
}
EXPORT_APIは、tizen ライブラリによって次のように定義されています__attribute__((__visibility__("default")))
。(これは、Tizen Studio が C 関数をエクスポートするために使用するものです)。これ (myclasses.so) を正常にビルドしました。
main.cpp については、次のようなことをしたいと思います。
// using namespace myspace;
int main(int argc, char** argv){
extern class myclass c(); // this makes linker look for "myclass"
c.foo();
}
C では、エクスポートされた各関数の前方宣言ステートメントを含むヘッダー ファイル (main.h) がありました。C ++とクラスでそれを行うにはどうすればよいですか?
編集:コンパイラは名前空間を認識しないため、namespace を使用して削除されました。myclass の宣言型にextern クラスを追加しました。
Tizen Studio の [Project Properties] -> [Settings] -> [C++ Linker] -> [Libraries] で、「-l」 <libname.so> と「-L」を libname.so へのパスに追加しました。しかし、実際のリンカー コマンド ラインでは、「-l<libname.so>」が「-L」の前に置かれます。リンカーは、lib パス (-L) を設定する前に、"libname.so" (-l) を検索します。そのため、リンカは libname.so を見つけられません。しかし、この順序を切り替える設定を取得できません。
Tizen Studio の経験が豊富な人はいますか?