2012-04-05 18 views
1

私はHarpperという開発プラットフォームを使用して、Clipperコードを使用して32ビットSuSe上で動作するLinux実行可能ファイルを作成しています。コンパイルエラー - sysdeps/i386/elf/start.Sおよびメインへの未定義参照

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

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 

(これは、基本的には画面上に「すべてが行われ、」出力し、それは私が、私はそれを正しくコンパイルするために得ることができるまで、それはやらせてるすべてです。)

この問題を追跡しようとしたところ、「main」(明らかにそこにある)関数を見つけることができないか、あるいは-gパラメータセットが必要ですハーバーコンパイラは、それ自体ですべてを行い、私もパス

/usr/src/packages/BUILD 

がオンに空であることを指摘したいと思います...

を - 私は実際にコンパイラを自分で対処していないので、私は行うことはできません私のシステム!しかし、上のエラーに記載されているフルパスは、ファイルcrt1.oにハードコードされています...

私はコンパイラにACオブジェクトを作成してコンパイルするように指示しましたが、 Cコンパイラ用の入力ファイルです。私は、クリッパーとCの両方にかなり新しいです...

私はこの問題に正しくタグ付けしなかった場合、私は謝罪します - これは私の最初のstackoverflowのポストですが、他のトピックについては非常に知識豊富な回答がありますので、試してみることにしました。 必要な情報があれば教えてください。

ありがとうございます!

+0

コンパイルスクリプトを編集する可能性があることに気付いたので、GCCエントリを見つけて "-g"をパラメータとして追加しましたが、同じエラーが発生しました。私の場合... – semmelbroesel

答えて

1

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

(OpenSuSeの代わりに)Debianのコピーをインストールしてもう一度試しましたが、今回はもうエラーが表示されなくなりました。

が不足しているライブラリのいくつかの問題に遭遇したとコンパイラがそれらを逃す文句保持した後、gccと様々なzlibあるいはlibzをライブラリをインストールする必要がありました:

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

しかし、私はSynapticパッケージマネージャの検索を使って実験し、保管しましたライブラリが動作するまでインストールします。 1は、いくつかのGoogleの仕事を必要ですが、私はインストールに必要なライブラリがます:zlib1g-devのだったことが判明し、その後インストールされた

/usr/bin/ld: cannot find -lz 

:最後に

、1つのより多くのライブラリが欠落していました、それは正常にコンパイルされました!

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

私は自分のスタンドアロンの実行可能な実行可能ファイルを持っています。他の誰かが同じ問題に遭遇しているかもしれません。

問題を解決しました。

関連する問題