gpt4 book ai didi

c - 添加源文件后,gcc 不会让我使用 'just compile' c 源

转载 作者:行者123 更新时间:2023-11-30 18:36:57 24 4
gpt4 key购买 nike

我正在编写一个大致如下所示的程序:

  • src/中的一些主要代码
  • Demo1/中的一些代码

我将 Demo1 的内容编译为 .o ,然后编译为 .so ,并在创建主可执行文件时使用该 .so 。 (Demo1的代码在src/中使用)。
Demo1 使用已编译的库 lib1,该库及其二进制文件和源代码位于单独的文件夹中。

这就是我构建 Demo1 的方式:

gcc -c -fpic Demo1/src/*.c -Ilib1/include -o Demo1/build/demo1.o  
gcc -shared Demo1/build/demo1.o -Llib1/lib -llib1 -o Demo1/dist/libDemo1.so

现在我已经向 Demo1 添加了一个新的 .c 文件和一个新的 .h 文件,然后当我运行构建脚本(其中包含上面的两个命令等)时发生了这种情况:

gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files

这是什么意思?我认为添加源文件不会导致这种情况..
当然,我过去一直在同一行上使用 -c-o ,除此之外 - 句子的最后部分并不是最清楚的我在语法上...(这是否意味着我不能用 {-E 当 -E 有多个文件} 指定 -o )?

我在 Ubuntu 14.04 机器上运行 gcc 4.8.4。
提前致谢。

最佳答案

-o 选项指定(单个)输出文件。当您有以下情况时,可以轻松地忽略不立即相关的选项:

gcc -c file1.c file2.c -o output.o

file1.cfile2.c 的输出是否进入 output.o

GCC 告诉您不能这样做。您必须使用:

gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o

或者你必须使用:

gcc -c file1.c file2.c

这就是错误消息的内容。

请注意,您的子目录中有源代码。编译器的默认输出将位于当前目录中。即:

gcc -c Demo1/file1.c Demo1/file2.c

将创建输出文件./file1.o./file2.o。 AFAIK,没有办法指定输出目录(-o目录名给出类似错误:无法打开输出文件'directory- name': '是一个目录',例如)。因此,使用显式输出文件进行单独编译可能是您工作的最佳方式。这也是像 make 这样的构建系统会做的事情。

关于c - 添加源文件后,gcc 不会让我使用 'just compile' c 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39125920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com