我正在使用一个名为 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 帖子——但我在这里看到了很多关于其他主题的知识渊博的答案,所以我决定试一试。如果需要更多信息,请告诉我。
提前致谢!