1

所以我安装了BCM2835,但是当我尝试使用“gcc -c main main.c”编译一个 .c 文件时,它会出现以下错误。我不知道如何编译 linux btw,只是在互联网上关注一些东西。

/tmp/ccSVwHkt.o: In function `main':
main.c:(.text+0x14): undefined reference to `bcm2835_init'
main.c:(.text+0x3c): undefined reference to `bcm2835_gpio_fsel'
main.c:(.text+0x48): undefined reference to `bcm2835_gpio_write'
main.c:(.text+0x50): undefined reference to `bcm2835_delay'
main.c:(.text+0x5c): undefined reference to `bcm2835_gpio_write'
main.c:(.text+0x64): undefined reference to `bcm2835_delay'
collect2: ld returned 1 exit status

这是 main.c 的内容(从谷歌代码复制)

/*
 * main.c
 *
 *  Created on: 23-jun.-2013
 *      Author: Andreas Backx
 */


#include <bcm2835.h>
// Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)
#define PIN RPI_GPIO_P1_11
int main(int argc, char **argv)
{
    // If you call this, it will not actually access the GPIO
    // Use for testing
//    bcm2835_set_debug(1);
    if (!bcm2835_init())
        return 1;
    // Set the pin to be an output
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
    // Blink
    while (1)
    {
        // Turn it on
        bcm2835_gpio_write(PIN, HIGH);

        // wait a bit
        bcm2835_delay(500);

        // turn it off
        bcm2835_gpio_write(PIN, LOW);

        // wait a bit
        bcm2835_delay(500);
    }
    bcm2835_close();
    return 0;
}
4

2 回答 2

9

gcc -c main main.c考虑到您得到的输出,这没有任何意义。也就是说,如果它真的是你正在做的,你需要改变它:

gcc -o main main.c

您可能仍然会从链接器中收到“未定义符号”错误,因为您没有链接到任何定义这些符号的库。快速检查您链接的站点上的示例表明您需要与bcm2835库链接:

gcc -o main main.c -lbcm2835

如果您将库安装在不知道要查找它-L的地方,您可能还需要添加一个标志。gcc

于 2013-06-23T15:12:59.887 回答
0

我会告诉你一个更简单的选择,这样你就不必担心每次都写这个命令。


  • 如果您正在研究 Geany,请转到该部分,然后。在那里你会看到你正在使用这个命令来编译 -> gcc -Wall -c "% f"
  • 将其放置到位gcc -Wall -c "% f" -lbcm2835
  • 并在行 -> gcc -Wall -o "% e" "% f" -lbcm2835
  • 并在行中->sudo "./%e"

然后按确定。现在一切都会好起来的;)

于 2021-06-30T05:53:44.707 回答