【问题标题】:gcc command line structure argumentsgcc 命令行结构参数
【发布时间】:2018-08-11 17:43:54
【问题描述】:


我尝试使用 gcc 版本 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1+deb9u1) 编译一个 c 文件。
我在源文件的文件夹中运行编译器,但我不断收到最后一个参数 ('bcm2835') 的“找不到文件”错误消息。

   gcc -o gpio -l rt /home/pi/bcm2835-1.15/src/bcm2835.c -l bcm2835
   /usr/bin/ld: cannot find -lbcm2835
   collect2: error: ld returned 1 exit status

AFAIK,gcc 没有指定第三个参数,我不知道第三个参数的用途以及在哪里找到它。
如果我省略该参数,我会得到几个错误行,每个错误行对应一个内部命令,例如:

undefined reference to bcm2835_init

我也想知道 rt 代表什么。我在官方 gcc 文档中找不到它。
谢谢

【问题讨论】:

    标签: gcc-warning


    【解决方案1】:

    -l 之后应该没有空格。所以应该是-lrt(不是-l rt),应该是-lbcm2835(不是-l bcm2835)。

    您需要在调用-lbcm2835之前添加一个带有-L(大写L)的链接器搜索路径。

    输入文件通常应该在最后(即以main.c 结尾的参数)。那是

    gcc -o main -lrt -lbcm2835 /home/pi/bcm2835-1.15/main.c
    

    -l 将库链接到程序。 -L 设置库搜索路径,以便 -l 找到指定的库。

    有关-l-L 的详细信息,请参阅this page

    【讨论】:

    • 抱歉,Michael,我在您发送回复时编辑了主题,所以有新文本。无论如何,我尝试了你的建议,但我仍然得到相同的结果,gcc -o main -lrt -lbcm2835 /home/pi/bcm2835-1.15/src/bcm2835.c /usr/bin/ld: 找不到 -lbcm2835。我应该在哪里寻找链接器,我应该在哪里放置 -L?
    • @samtal:您需要了解-l-L 实际上应该做什么。什么是图书馆搜索路径。你不能只是把-L 放在某个地方,因为它不是一个神奇的“请工作”开关。 -L 应该告诉编译器在哪里可以找到 bcm2835.a 库。
    • 谢谢,迈克尔,现在看来整个问题是由于我的计算机上的权限不正确造成的。无论如何,我像往常一样学到了一些新东西,即使是很小的......我正在清理权限,之后我会再试一次,希望它会起作用。然后我会更新这个帖子。
    • 要完成并关闭这个问题,是的,gcc 编译问题是文件和文件夹所有权不正确的结果。要使编译工作,用户必须有权访问用户拥有的库或库,否则会出现“找不到文件”错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多