Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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 在函数“u start';”中:对“main'”的未定义引用;_C_Gcc_Makefile_Ld - Fatal编程技术网

C 在函数“u start';”中:对“main'”的未定义引用;

C 在函数“u start';”中:对“main'”的未定义引用;,c,gcc,makefile,ld,C,Gcc,Makefile,Ld,我正在从事一个有30多个源文件和一些子目录的项目> 我添加了i2c支持,我正在尝试编译它,但出现以下错误: === Making Control Interface Type. make[1]: Entering directory '/root/i2c_test/TestBench/interfaces' arm-linux-gnueabihf-gcc -Wall -g -O0 -std=c11 -DWIN32 -DUSE_SPIDEV - D_DEFAULT_SOURCE -c -

我正在从事一个有30多个源文件和一些子目录的项目> 我添加了i2c支持,我正在尝试编译它,但出现以下错误:

=== Making Control Interface Type.
make[1]: Entering directory '/root/i2c_test/TestBench/interfaces'
arm-linux-gnueabihf-gcc -Wall -g -O0 -std=c11 -DWIN32 -DUSE_SPIDEV -    D_DEFAULT_SOURCE   -c -o i2cdev_lib.o i2cdev_lib.c
arm-linux-gnueabihf-gcc -Wall -g -O0 -std=c11 -DWIN32 -DUSE_SPIDEV -    D_DEFAULT_SOURCE   -c -o spidev_lib.o spidev_lib.c
+++ Compiling I2C_SPI_LIB i2cdev_lib.o spidev_lib.o
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o: In     function `_start':
/build/glibc-1yTpB4/glibc-2.19/csu/../ports/sysdeps/arm/start.S:119:
undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:56: recipe for target '../Debug/i2c_spidev_lib.o' failed
make[1]: *** [../Debug/i2c_spidev_lib.o] Error 1
make[1]: Leaving directory '/root/i2c_test/TestBench/interfaces'
Makefile:139: recipe for target 'interface' failed
Makefile中的行 #模式规则 $(CIFOUTDIR)/i2c_spidev_lib.o:i2cdev_lib.o spidev_lib.o @echo“+++编译I2C_SPI_LIB$^” @$(LD)-o$@$^

$(CIFOUTDIR)/spidev_lib.o:spidev_lib.c#直接编译到restoutdir

@回音“+++编译$你在建图书馆吗?那么你不应该正常链接它。您应该做什么取决于您是创建静态库还是动态库。关于如何创建这两种类型,这里和互联网上都有很多重复。将
-ldl-lgcc-lc-lm
链接到一个对象文件是毫无意义和错误的。你需要读更多关于你一定是看错了规则的书。您介绍的规则不会输出观察到的消息“+++编译I2C_SPI_LIB i2cdev_LIB.o spidev_LIB.o”。他们会输出更像“+++编译spidev_lib.c”的东西。即使这样做,我仍然会得到相同的错误$(CIFOUTDIR)/i2c_spidev_lib.o:i2cdev_lib.c spidev_lib.c直接编译到restoutdir@echo”+++编译i2c_SPI_lib$^“@$(CC)$(CFLAGS)-ldl-lgcc-lc-lm-o$@$?请验证您的项目是否至少包含一个函数名为
main(){}
的文件。即使函数不包含任何内容也无所谓。但必须有一个名为“main()”的函数。因为
startup.S
文件正在抱怨它。在
startup.S
中,标签
\u start:
下应该有一个代码可以跳转到
main
函数,类似于
b main
即分支到main。您正在构建库吗?那么你不应该正常链接它。您应该做什么取决于您是创建静态库还是动态库。关于如何创建这两种类型,这里和互联网上都有很多重复。将
-ldl-lgcc-lc-lm
链接到一个对象文件是毫无意义和错误的。你需要读更多关于你一定是看错了规则的书。您介绍的规则不会输出观察到的消息“+++编译I2C_SPI_LIB i2cdev_LIB.o spidev_LIB.o”。他们会输出更像“+++编译spidev_lib.c”的东西。即使这样做,我仍然会得到相同的错误$(CIFOUTDIR)/i2c_spidev_lib.o:i2cdev_lib.c spidev_lib.c直接编译到restoutdir@echo”+++编译i2c_SPI_lib$^“@$(CC)$(CFLAGS)-ldl-lgcc-lc-lm-o$@$?请验证您的项目是否至少包含一个函数名为
main(){}
的文件。即使函数不包含任何内容也无所谓。但必须有一个名为“main()”的函数。因为
startup.S
文件正在抱怨它。标签
\u start:
下的
startup.S
中应该有一个代码可以跳转到
main
函数,类似于
b main
,即分支到main。
$(CIFOUTDIR)/spidev_lib.o : spidev_lib.c # compile directly to restoutdir
    @echo "+++ Compiling $<"
    @$(CC) $(CFLAGS) -ldl -lgcc -lc -lm -c -o $@ $<

$(CIFOUTDIR)/i2cdev_lib.o : i2cdev_lib.c # compile directly to restoutdir
    @echo "+++ Compiling $<"
    @$(CC) $(CFLAGS) -ldl -lgcc -lc -lm -c -o $@ $<