1

Harbourという開発プラットフォームを使用してClipperコードを使用し、32ビットSuSeで動作するLinux実行可能ファイルを作成しています。

プラットフォームの外部ライブラリを必要とする実行可能ファイルをすでに作成できますが、スタンドアロンの実行可能ファイルを作成する必要があります。Harbourでは、必要なすべてのライブラリを含めることでそれを実行できますが、次のコンパイルコマンドを試してみると次のようになります。

hbmk test3 -static 

次のエラー出力が表示されます。

Harbour 2.0.0 (Rev. -1) 
Copyright (c) 1999-2010, http://www.harbour-project.org/ 
Compiling 'test3.prg'... 
Lines 3, Functions/Procedures 1 
Generating C source output to 'test3.c'... Done. 
/usr/lib/gcc/i586-suse-linux/4.5/../../../crt1.o: In function 
`_start': 
/usr/src/packages/BUILD/glibc-2.11.2/csu/../sysdeps/i386/elf/start.S: 
115: undefined reference to `main' 
./test3.o: In function `HB_FUN_MAIN': 
test3.c:(.text+0x17): undefined reference to `hb_vmExecute' 
./test3.o: In function `hb_vm_SymbolInit_TEST3': 
test3.c:(.text+0x4e): undefined reference to `hb_vmProcessSymbols' 
./test3.o:(.data+0x38): undefined reference to `HB_FUN_QOUT' 
/tmp/cc5KcKMd.o: In function `hb_lnk_SetDefault_build': 
hb-build-root-24212.c:(.text+0x1e): undefined reference to 
`hb_vmSetDefaultGT' 
/tmp/cc5KcKMd.o: In function `_hb_lnk_ForceLink_build': 
hb-build-root-24212.c:(.text+0x8): undefined reference to 
`HB_FUN_HB_GT_STD' 
collect2: ld returned 1 exit status 

現時点での私のコードは非常に単純で、ばかげています。

function main() 
? "All done." 
return nil 

(基本的に「Alldone。」を画面に出力します。正しくコンパイルできるようになるまで、これですべてです。)

この問題を追跡しようとした90分間から、関数'main'(明らかにそこにあります)が見つからないか、cコンパイラに-gパラメータセットが必要であるように聞こえます-これは私ができることです'私が実際にコンパイラーに対処していないので、そうします-ハーバーコンパイラーはそれ自体ですべてを行います...

私はまた、その道を指摘したいと思います

/usr/src/packages/BUILD

私のシステムでは空です!ただし、上部のエラーに記載されているフルパスは、ファイルcrt1.o...にハードコードされています。

acオブジェクトを作成してコンパイルするようにコンパイラーに指示することも試みましたが、cコンパイラーの正しい入力ファイルが生成されず、クリッパーとcの両方にかなり慣れていません...

この問題に正しくタグを付けなかった場合はお詫びします-これは私の最初のstackoverflow投稿です-しかし、他のトピックについてここで非常に知識のある回答をたくさん見たので、試してみることにしました。他に必要な情報がありましたら、お知らせください。

前もって感謝します!

4

1 に答える 1

1

私はそれを回避する方法を考え出しました。

(OpenSuSe の代わりに) Debian のコピーをインストールして再試行したところ、今度は上部にエラーが発生しなくなりました。

ライブラリーが見つからないといういくつかの問題に遭遇し、コンパイラーが不足しているという不平を言い続けた後、gcc とさまざまな zlib または libz ライブラリーをインストールする必要がありました。

/usr/bin/ld: cannot find -l[xyz]

しかし、機能するまで、Synaptic Package Manager の検索とライブラリのインストールを実験し続けました。

最後に、もう 1 つのライブラリが不足していました。

/usr/bin/ld: cannot find -lz

これには Google の作業が必要でしたが、インストールする必要のあるライブラリはzlib1g-devであることがわかりました。それをインストールすると、正常にコンパイルされました。

次のハードルは、別のコンピューターで新しい実行可能ファイルを実行するときに、さらに多くのライブラリーが必要になることでした。そのため、コンパイラーにすべての静的ライブラリーを含めるように指示したところ、ついに機能しました!

これで、スタンドアロンのポータブル実行可能ファイルが動作するようになりました。うまくいけば、他の誰かが同じ問題に遭遇し (可能性は低いかもしれません)、ここで助けを見つけることができます。

問題が解決しました。

于 2012-04-06T20:48:22.223 に答える