gpt4 book ai didi

c - 从 c 程序调用时 gcc 出错

转载 作者:太空狗 更新时间:2023-10-29 15:09:00 25 4
gpt4 key购买 nike

我正在尝试从其他 c 程序编译一个简单的 c 文件。我通过一个简短的 shell 脚本调用 gcc(我知道我可以直接这样做,但这是一个测试)。这是我的代码:

我的主程序(小块):

    char strCommand[100];
sprintf(strCommand, "./compile.sh %s %u", fileName, nr);

FILE *pipe = popen(strCommand, "r");
if (pipe == NULL) {
perror("Unable to open compile script");
exit(-1);
}

char path[LINE_BUFSIZE];
while (fgets(path, LINE_BUFSIZE, pipe) != NULL)
printf("%s", path);

pclose(pipe);

我的 shell 脚本:

#!/bin/bash 
gcc $1 -o foo-$2

以及应该编译的文件 ;-) :

#include <stdio.h>
#include <stdlib.h>

int main(){
printf("Hello world");
}

当我直接从终端调用 bash 脚本时,一切正常。但是,当从 c 程序调用我的脚本时,会发生以下错误:

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

这个错误意味着我的 Hello World 程序中没有 main 函数。但是很明显,有一个。我错过了什么?

最佳答案

确保您的 hello world 程序具有 .c 扩展名而不是 .cpp(或类似)扩展名

gcc可以编译C++程序,但它不链接C++标准库,它链接标准C库。

如果您的程序是 C++,您的 main 函数将被命名,这将解释为什么 C 库找不到它。

如果您想使用 C++ 标准库编译 C++,请使用 g++。

关于c - 从 c 程序调用时 gcc 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25059672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com