使用 clang 的交叉编译中对 `printf' 的未定义引用
undefined reference to `printf' in cross-compilation using clang
我执行下面的代码来创建 .o 文件
clang --target=i686-pc-none-elf -march=i386 -c fcfs.c -o fcfs.o -std=gnu90 -O2 -Wall -Wextra -Wall
然后当我执行下面的代码时
i686-elf-ld -T linker.ld -o JOS.bin fcfs.o
我收到错误提示
**fcfs.c:(.text+0x13): undefined reference to `fopen'
fcfs.c:(.text+0x45): undefined reference to `fgets'
fcfs.c:(.text+0x57): undefined reference to `printf'**
我的fcfs.c文件
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
char dataToBeRead[50];
int a = abs(-5);
FILE *fp;
fp = fopen("process.txt", "r");
// int fp=1;
printf("%d", a);
int s;
if(fp != NULL){
printf("File is not empty");
while( fgets ( dataToBeRead, 50, fp ) != NULL )
{
// Print the dataToBeRead
printf( "%s" , dataToBeRead ) ;
}
}
return 0;
}
为什么我会收到这个错误。
我是否需要向与库链接相关的 clang 添加更多参数?
我可以在 clang 中使用 gcc 库吗?
或者是 i686-elf-ld
的问题 ?
Clang 支持头文件,例如 stdio
.h 、stdlib.h
和其他头文件。
如果您遇到类似
的问题
fcfs.c:(.text+0x13): undefined reference to `fopen'
fcfs.c:(.text+0x57): undefined reference to `printf'
在 clang 中,您可以通过将 --sysroot
添加到您的 clang 选项来解决它。
就我而言
clang --target=i686-pc-none-elf -march=i386 --sysroot=/usr -c fcfs.c -o fcfs.o -std=gnu90 -O2 -Wall -Wextra -Wall
在这种情况下,-sysroot
将开始从 /usr
文件夹中查找头文件。在 /usr 中,它会找到像 /bin ,/include ,etc
这样的文件夹。当它转到 /include 文件夹时,它将找到所有头文件,这将解决问题。
有关更多信息,请参阅 https://clang.llvm.org/docs/CrossCompilation.html
我执行下面的代码来创建 .o 文件
clang --target=i686-pc-none-elf -march=i386 -c fcfs.c -o fcfs.o -std=gnu90 -O2 -Wall -Wextra -Wall
然后当我执行下面的代码时
i686-elf-ld -T linker.ld -o JOS.bin fcfs.o
我收到错误提示
**fcfs.c:(.text+0x13): undefined reference to `fopen'
fcfs.c:(.text+0x45): undefined reference to `fgets'
fcfs.c:(.text+0x57): undefined reference to `printf'**
我的fcfs.c文件
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
char dataToBeRead[50];
int a = abs(-5);
FILE *fp;
fp = fopen("process.txt", "r");
// int fp=1;
printf("%d", a);
int s;
if(fp != NULL){
printf("File is not empty");
while( fgets ( dataToBeRead, 50, fp ) != NULL )
{
// Print the dataToBeRead
printf( "%s" , dataToBeRead ) ;
}
}
return 0;
}
为什么我会收到这个错误。
我是否需要向与库链接相关的 clang 添加更多参数?
我可以在 clang 中使用 gcc 库吗?
或者是 i686-elf-ld
的问题 ?
Clang 支持头文件,例如 stdio
.h 、stdlib.h
和其他头文件。
如果您遇到类似
的问题fcfs.c:(.text+0x13): undefined reference to `fopen'
fcfs.c:(.text+0x57): undefined reference to `printf'
在 clang 中,您可以通过将 --sysroot
添加到您的 clang 选项来解决它。
就我而言
clang --target=i686-pc-none-elf -march=i386 --sysroot=/usr -c fcfs.c -o fcfs.o -std=gnu90 -O2 -Wall -Wextra -Wall
在这种情况下,-sysroot
将开始从 /usr
文件夹中查找头文件。在 /usr 中,它会找到像 /bin ,/include ,etc
这样的文件夹。当它转到 /include 文件夹时,它将找到所有头文件,这将解决问题。
有关更多信息,请参阅 https://clang.llvm.org/docs/CrossCompilation.html