1

WindowsホストでReal View開発者スイートツールにリンクされたコマンドを使用して、Windowsで作成する共有オブジェクトがあります-

armlink -o mylib.so <"my *.o files given here">

次に、gcc ツールを使用して、Linux 上のこの mylib.so 共有ライブラリにアプリケーションをリンクします。

この mylib.so の関数内に printf ステートメントがありますが、最終的な実行可能ファイルを実行すると、コンソールに printf 出力が表示されません (printfs が呼び出される場所には stdio.h が含まれます)。

printf またはシステム関数/システム コール/ランタイム ライブラリ関数が正しく動作しない原因となる共有ライブラリに関する既知の問題はありますか?

それとも、Windows ベースのコンパイラ ツール チェーンで共有ライブラリを作成し、この共有ライブラリを linux-gcc コンパイラ ツールのアプリケーションにリンクするという私の独特のセットアップと関係がありますか?

ありがとうございました。

-広告

4

1 に答える 1

1

あなたのターゲットはarmであり、これはCであると想定しているため、WindowsでいくつかのファイルをコンパイルしてからLinuxでリンクすることは問題になりません。しかし、これを確認しましたか?hello.c からリンクされた、Windows で hello.so を作成することをお勧めします。

#include <stdio.h>
void hello(void) {printf("Hello\n");}

次に、Linux の main.c から main をリンクします。

void hello(void);
int main(int argc, char *argv[]){ hello(); return 0; }

最低限のコンパイラ チェーン テストとして。


最終的な実行可能ファイルで定義されたコード (つまり、共有ライブラリのコードではない) から printf を呼び出した場合、そこから何らかの出力が得られますか?


する

strings --print-file-name -a mylib.so final_executable | grep "string from printf in shared library"

2 つのオカレンスを返しますか?


printfへの参照はありますか

readelf -a mylib.so
readelf -a final_executable

?

于 2009-04-13T22:42:54.777 に答える