Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 编译错误-sysdeps/i386/elf/start.S和对main的未定义引用_C_Linux_Clipper - Fatal编程技术网

C 编译错误-sysdeps/i386/elf/start.S和对main的未定义引用

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

我正在使用一个名为Harbor的开发平台,使用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 
(它基本上会将“全部完成”输出到屏幕上,这就是我所要做的,直到我能够正确编译为止。)

我花了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”作为参数-仍然得到相同的错误,所以看起来不像我的例子中那样简单。。。