问题标签 [cc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - Solaris 5-10 CC 编译器缺少符号错误导致链接失败
如果这个问题发布看起来很熟悉,我深表歉意。我昨天在这里发布了这个问题:Solaris 10 CC 预处理器错误导致未定义符号。但是,我添加了一些仅出现在这篇文章中的更多澄清信息(我从昨天开始了解到的)。
我有一个非常简单的 C++ 文件,如下所示,我正在使用 CC 编译器在 Solaris 5-10 上进行编译。这是我的文件 myTest.C 中的源代码:
我想首先在这个文件上运行 CC 预处理器,检查预处理文件,然后将该预处理文件编译成目标文件。我称之为“间接编译”。为此,我执行以下操作:
我还想编译这个文件,而不像通常那样进行单独的预处理步骤。我称之为“直接编译”。为此,我执行以下操作:
理论上,myFile_direct.o 和 myFile_indirect.o 在功能上应该是等效的。它们当然应该在各自的符号表中包含相同数量的符号,对吧?因此,让我们检查一下它们的符号:
令人惊讶的是,直接编译的目标文件包含 12 个在间接编译的文件中不存在的符号。为什么?这对我来说似乎是一个严重的错误。为什么间接编译的文件中没有这些符号?如果它们是不必要的,为什么将它们包含在直接编译的文件中?直接编译不应该先做同样的预处理,然后对用户隐藏它吗?这里发生了什么?
您可以看到这些缺失的符号阻止了间接编译的目标文件的最终链接。但是直接编译的目标文件链接就好了:
PS。我不认识十二个额外的符号,也不明白它们的目的是什么:
c - C将char与“\ n”进行比较警告:指针和整数之间的比较
我有以下 C 代码部分:
在编译期间,编译器告诉我
问题是,如果替换"\n"
为'\n'
根本没有警告。谁能解释一下原因?另一个奇怪的事情是我根本没有使用指针。
我知道以下问题
但在我看来,它们与我的问题无关。
PS。如果不是char c
会有int c
,仍然会有警告。
linker - 链接 Python 模块:链接 `ld` 和 `cc` 的区别
这有效:
这不起作用:
在这两种情况下,我都没有收到任何编译器/链接错误。但是,当尝试导入它时,我收到此错误:
为什么?这两种方法有什么区别吗?有什么区别?
debugging - gdb找不到cc编译的源文件
我有一个源文件 testcc.c,它只打印一个“Hello, World”,我用 cc 编译它,如下所示
当我运行它时它工作正常。现在我想使用以下命令使用 gdb 对其进行调试。
我可以看到 gdb 的输出。
GDB 是免费软件,欢迎您在特定条件下分发它的副本;键入“显示复制”以查看条件。GDB 绝对没有任何保证;键入“显示保修”以获取详细信息。GDB 4.16 (sparc-sun-solaris2.6),版权所有 1996 Free Software Foundation, Inc...
但是,当我尝试在第 5 行设置断点时,我收到以下消息
问题是 /home/users/xxx/C 是我当前的工作目录,而不是源文件!
然后,我尝试使用 file:line-number 选项
因此,我包含文件名的完整路径,如下所示
我一头雾水,文件在那里,为什么gdb找不到呢?我也尝试在启动gdb时指定目录来搜索源文件
它仍然无法正常工作,有什么问题?
gcc - 无法在 ubuntu 中编译 cc、gcc | 没有相应的文件和目录
在这方面真的需要帮助。当我尝试使用 cc 编译时,它显示
但所有必要的文件 cc、gcc、c++ 都存在于 /usr/bin 目录中。我尝试安装 gcc-multilib 包,之后出现此错误。需要尽快修复它,因为它运行一些重要的程序。当我这样做时:update-alternatives --list cc
它显示了/usr/bin/gcc
。然后我尝试 update-alternatives --set cc /usr/bin/gcc
了,它给了
update-alternatives: warning: forcing reinstallation of alternative /usr/bin/gcc because link group cc is broken. update-alternatives: warning: not replacing /usr/bin/cc with a link.
gcc - GCC,-W1 是什么意思
我有一个使用 -W1 参数的遗留 Makefile,我没有找到任何引用,我认为这可能是一个错字,'1' 应该是 'l'。但是,它有效......那么,任何人都可以解释为什么这条线有效吗?
$(CC) 是 GCC,编译出来的文件是 C 文件。当我尝试使用此命令编译 CPP 文件时,我才得到
c - 使用 Cygwin 的 MPICH2 编译问题
尝试使用 Cygwin 在 Windows 机器上编译 MPICH2。
一点相关资料
- $ uname -> CYGWIN_NT-6.1
- $ gcc --version -> gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) 版权所有 (C) 2004 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。
- MPICH2 版本:1.5
配置似乎已正确完成,但在编译期间我收到以下信息:
检查“dbxerr.c”我发现:
通过检查'config.log'我发现:
这证实了:
正被 CPP 使用。
我发现'SIG_HANDLER_PROTOTYPE'被定义为:
'sighandler_t' 在 '/usr/include/signal.h' 中定义为:
最后,'_sig_func_ptr' 定义为:
这是就我自己的研究而言,我似乎无法将各个部分组合在一起。我不明白为什么会有原型不匹配。我将继续尝试自己解决此问题,但我们将不胜感激!
提前致谢!
更新:
我正在重新检查“make”的输出,我认为我犯了一个错误。我认为问题出在声明上:
但是,问题似乎与定义有关:
'sig' 似乎是一个 int 类型,但我不明白 'SIG_HANDLER_PROTOTYPE' 是什么类型。有人可以解释一下吗:
shared-libraries - 使用或不使用 -c 编译共享库
我正在将 ac 程序编译为要导入Ctypes
到 python 中的共享库。这些是我遵循的步骤:
制作共享库时建议不要使用-c
,因为编译后不会链接(我在这里的一些帖子上看到过,我得到链接后会发布链接)。但我注意到,当我删除时-c
,会弹出这些错误:
所以我添加-c
了,错误消失了。另外,我也可以从 ctypes 导入库,没有任何问题。以后会不会惹麻烦?
使用或不使用 -c 进行编译时会出现哪些问题?
c - 为什么这个 perror 的输出?
我以前从未见过:
上面的左下角是什么?该程序的最新版本是
测试
以下重现了奇怪的输出:
更新
clang 编译器会发出警告,但不会 (g)cc:
c - 如何指定目标文件的名称
当我直观地尝试运行这样的命令时
抛出以下错误
cc: 不能用 -c 指定 -o,不能用 -S 或 -E 指定多个文件