C 编译错误-sysdeps/i386/elf/start.S和对main的未定义引用
我正在使用一个名为Harbor的开发平台,使用Clipper代码创建一个在32位SuSe上工作的Linux可执行文件 我已经可以创建一个仍然需要平台外部库的可执行文件,但是我需要创建一个独立的可执行文件。Harbour允许我通过包含所有需要的库来实现这一点,但当我尝试以下编译命令时:C 编译错误-sysdeps/i386/elf/start.S和对main的未定义引用,c,linux,clipper,C,Linux,Clipper,我正在使用一个名为Harbor的开发平台,使用Clipper代码创建一个在32位SuSe上工作的Linux可执行文件 我已经可以创建一个仍然需要平台外部库的可执行文件,但是我需要创建一个独立的可执行文件。Harbour允许我通过包含所有需要的库来实现这一点,但当我尝试以下编译命令时: hbmk test3 -static 我得到以下错误输出: Harbour 2.0.0 (Rev. -1) Copyright (c) 1999-2010, http://www.harbour-projec
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
(它基本上会将“全部完成”输出到屏幕上,这就是我所要做的,直到我能够正确编译为止。)
我花了90分钟的时间试图找出这个问题,听起来要么它找不到函数“main”(显然在那里),要么c编译器需要-g参数集-这是我做不到的,因为我自己实际上并没有处理编译器-Harbor编译器自己做每件事
我还要指出,这条道路
/usr/src/packages/BUILD
在我的系统上是空的!然而,上面的错误中提到的完整路径被硬编码到文件crt1.o中
我甚至试着告诉编译器创建一个c对象并编译它,但是它没有为c编译器生成正确的输入文件,而且我对clipper和c都是相当陌生的
如果我没有正确标记这个问题,我深表歉意-这是我的第一篇stackoverflow帖子-但是我在这里看到了很多关于其他主题的非常有知识的答案,所以我决定尝试一下。
如果需要更多信息,请告诉我
提前谢谢 我想出了一个解决办法 我安装了一个Debian副本(而不是OpenSuSe)并重试,这次我不再遇到上面的错误 遇到了一些缺少库的问题,在编译器不断抱怨缺少gcc和各种zlib或libz库后,不得不安装它们:
/usr/bin/ld: cannot find -l[xyz]
但我一直在尝试Synaptic Package Manager的搜索和安装库,直到它成功
最后,又少了一个图书馆:
/usr/bin/ld: cannot find -lz
这需要一些谷歌的工作,但我发现我需要安装的库是zlib1g-dev,安装之后,它编译正常
下一个障碍是,当在另一台计算机上运行新的可执行文件时,它需要更多的库,所以我告诉我的编译器包含所有的静态库——最终它成功了
所以现在我有了一个独立的可移植可执行文件,希望其他人也遇到同样的问题(尽管可能性不大),并在这里找到帮助
问题解决了。我想出了解决办法 我安装了一个Debian副本(而不是OpenSuSe)并重试,这次我不再遇到上面的错误 遇到了一些缺少库的问题,在编译器不断抱怨缺少gcc和各种zlib或libz库后,不得不安装它们:
/usr/bin/ld: cannot find -l[xyz]
但我一直在尝试Synaptic Package Manager的搜索和安装库,直到它成功
最后,又少了一个图书馆:
/usr/bin/ld: cannot find -lz
这需要一些谷歌的工作,但我发现我需要安装的库是zlib1g-dev,安装之后,它编译正常
下一个障碍是,当在另一台计算机上运行新的可执行文件时,它需要更多的库,所以我告诉我的编译器包含所有的静态库——最终它成功了
所以现在我有了一个独立的可移植可执行文件,希望其他人也遇到同样的问题(尽管可能性不大),并在这里找到帮助
问题解决。我意识到我可能可以编辑编译脚本,所以我找到了GCC条目,添加了“-g”作为参数,但仍然得到了相同的错误,所以看起来不像我的情况那样简单……我意识到我可能可以编辑编译脚本,所以我找到了GCC条目,添加了“-g”作为参数-仍然得到相同的错误,所以看起来不像我的例子中那样简单。。。