1

我正在使用一个名为 Harbor 的开发平台来使用 Clipper 代码创建一个在 32 位 SuSe 上运行的 Linux 可执行文件。

我已经可以创建一个仍然需要平台外部库的可执行文件,但我需要创建一个独立的可执行文件。Harbor 允许我通过包含所有需要的库来做到这一点,但是当我尝试以下编译命令时:

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 

(它基本上将“All done.”输出到屏幕上,这就是我所做的一切,直到我可以让它正确编译为止。)

从我试图追查这个问题的 90 分钟来看,它听起来要么找不到函数“main”(显然在那里),或者 c 编译器需要 -g 参数集——这是我能做到的t 这样做是因为我自己并没有真正解决编译器问题——Harbor 编译器自己做所有事情......

我还想指出路径

/usr/src/packages/BUILD

我的系统上是空的!但是,顶部错误中提到的完整路径被硬编码到文件 crt1.o...

我什至尝试告诉编译器创建 ac 对象并对其进行编译,但它不会为 c 编译器生成正确的输入文件,而且我对 Clipper 和 c 都很陌生...

如果我没有正确标记这个问题,我深表歉意——这是我的第一篇 stackoverflow 帖子——但我在这里看到了很多关于其他主题的知识渊博的答案,所以我决定试一试。如果需要更多信息,请告诉我。

提前致谢!

4

1 回答 1

1

我想出了一个解决办法。

我安装了一份 Debian(而不是 OpenSuSe)并再次尝试,这次我不再遇到上面的错误。

遇到了一些缺少库的问题,并且在编译器不断抱怨缺少它们之后,不得不安装 gcc 和各种 zlib 或 libz 库:

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

但我一直在尝试使用 Synaptic 包管理器的搜索和安装库,直到它起作用。

最后,又少了一个库:

/usr/bin/ld: cannot find -lz

那个需要一些谷歌的工作,但我发现我需要安装的库是zlib1g-dev,安装后,它编译正常!

下一个障碍是,当在另一台计算机上运行新的可执行文件时,它需要更多的库,所以我告诉我的编译器包含所有静态库——它终于奏效了!

所以现在我有了我工作的独立可移植可执行文件,希望其他人遇到同样的问题(尽管不太可能)并在这里找到帮助。

问题解决了。

于 2012-04-06T20:48:22.223 回答