从c程序调用时,gcc会出错

JOK*_*JOK 5 c bash gcc

我正在尝试从其他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);
Run Code Online (Sandbox Code Playgroud)

我的shell脚本:

#!/bin/bash 
gcc $1 -o foo-$2
Run Code Online (Sandbox Code Playgroud)

和应该编译的文件;-):

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

int main(){
    printf("Hello world");
}
Run Code Online (Sandbox Code Playgroud)

当我直接从终端调用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
Run Code Online (Sandbox Code Playgroud)

此错误表示我的Hello World程序中没有主要功能.但显然有一个.我错过了什么?

dor*_*ron 1

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

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

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

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