2010-12-06 10 views
2

cとx.so共有ライブラリを生成するために使用します。 xc私はメインモジュールにあるいくつかの関数を使用したいメインファイルとexe)、種類の再帰的依存。 これを行う方法があります(これらの関数をx.cにコピーしないでください)。 私は-rdynamicについて読みましたが、完全に取得できませんでした。 私は 'somefunc'を宣言していません。 (somefuncがメインモジュールであり、私はXC内でextern somefunxをしましたが、うまくいきませんでした) 私はあなたが関数ポインタの引数をコールを取り戻すためにあなたの共有ライブラリで影響を受けるのメソッドを定義することができ おかげCで、共有ライブラリファイルのメインプログラムファイルから関数を使用する方法

+0

OSとコンパイラは何ですか?あなたは 'somefunc()'を使って何をしようとしましたか?ここに投稿することができるように整理されたバージョンでは何の問題も起こらないはずです。 –

答えて

2

を教えてください、その後、呼び出し時に、メインモジュールの関数を引数として渡します。例えば。

// Library 
void dosomething (int arg, void (*callback)(void)) { ... } 

// Main module 
void called_from_lib(void) { ... } 

dosomething(10, called_from_lib); 
0

これはUNIXのようです。関数dlopen()は、ライブラリ内の関数をコンパイル時に参照せずに、プログラムにリンクしなくても、動的に呼び出すことができます。 dlopen()はPOSIXなので、現代的なUNIXの箱に入れてください。ここ

例:

http://www.dwheeler.com/program-library/Program-Library-HOWTO/x172.html 

LD_LIBRARY_PATHもあります。この環境変数を使用すると、同じコードを使用できますが、コンパイル時にそこになかったライブラリを置き換えることができます。これはまさにあなたが求めていることではありませんが、dlopenに頼らずにアドホック共有ライブラリを使用する行に沿って何かをすることができます。 HPUXのようないくつかのシステムも同じことをするSHLIB_PATHをサポートしています。

関連する問題