Tag: gcc

从目标文件内联函数

我想内联一些我没有代码的函数。 它们存在于目标文件中。 有没有办法用gcc做到这一点? 换句话说,我希望在将我自己的代码文件与包含这些函数的目标文件链接时执行这些函数的内联。

gcc:允许未定义的符号

我不希望gcc链接器将未定义的符号显示为链接错误。 我在MAC OSX 10.6上使用gcc 4.2 当然我在线寻找解决方案,但所有的尝试都失败了! 如何修改此命令以摆脱未定义的符号错误? gcc -o Proj $(wildcard *.o); 谢谢。 编辑:我正在研究一个研究项目,我需要代码可以链接,我不在乎它是否会有运行时exception

gcc在一个小小的hello world程序中返回了大量的错误

我有点难过。 这是我从gcc得到的错误 gcc -lm -g -o bin / tomashell obj / tomashell.o obj / tomashell.o:在函数`_start’中: (.text + 0x0):`_start’的多重定义 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位0具有无效的符号索引12 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位1具有无效的符号索引13 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位2具有无效的符号索引2 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位3具有无效的符号索引2 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位4具有无效的符号索引12 / usr / bin / ld:/usr/lib/debug/usr/lib/crt1.o(.debug_info):重定位5具有无效的符号索引14 / […]

使用Python的CFFI并排除系统头

我正在尝试使用Python的CFFI开发Python绑定到用C编写的科学模型.CFFI文档有点稀疏,我陷入了cdef阶段。 到目前为止,我的流程遵循以下步骤: 预处理头文件: gcc -E -gcc -std=c99 -E -P src/my_c_interface.c -I./include/ -I../shared/include/ > header.txt 这将生成一个文本文件,其中包含include/目录中头文件中包含的所有C声明。 它还包括标准库的声明(我很确定这是我的问题所在)。 header.txt看起来像这样(完整的header.txt在这里 ): 从系统标题开始: typedef float float_t; typedef double double_t; extern int __math_errhandling(void); extern int __fpclassifyf(float); extern int __fpclassifyd(double); extern int __fpclassifyl(long double); extern __inline __attribute__((__gnu_inline__)) __attribute__ ((__always_inline__)) int __inline_isfinitef(float); extern __inline __attribute__((__gnu_inline__)) __attribute__ 并以我的标题中定义的片段结束: FILE *LOG_DEST; void finalize_logging(void); void […]

GCC:允许C99中的重载function

我在C99中编写代码并通过GCC编译。 我想使用函数重载的风格原因(否则我必须自己做名称修改)。 我读过有没有理由说C99不支持函数重载? 但是,我仍然想知道它是否可以在GCC中启用。 你能帮助我吗?

输入使用不起作用,但使用scanf

#include void main(){ char str[100]; char letter; letter=getchar(); printf(“%c”,letter); gets(str); //Rest of code } 执行时,代码跳过gets(str)行。 但是当我用scanf替换gets时,它可以工作。 任何具体的原因,为什么不起作用? 我正在使用gcc 4.7.2。

在#include指令结束时禁止GCC警告“额外令牌”

我正在用C语言编写一个程序,用于在HP NonStop机器上编译和运行。 但是,我想在运行Linux的工作站上进行主要开发。 HP NonStop C编译器需要非标准的#include指令,如下所示: #include nolist 对于每个#include指令,我的工作站的GCC抱怨: S88USF.c:139:21: warning: extra tokens at end of #include directive 我该怎样抑制这个特别警告? 注意:在SO上,已经提出了类似的问题,正确的答案是“不要让gcc首先抱怨任何理由”。 但是,在这种情况下,我明确地希望完全按原样使用#include指令。 我知道我在做什么,我只是不知道如何通知gcc。

变体宏:粘贴标记的扩展

我想知道是否可以“嵌套”可变宏调用。 我只关心GCC和Clang。 我的宏定义如下所示: /** * @brief Invoke an instance method. */ #define $(obj, method, …) \ ({ \ typeof(obj) _obj = obj; \ _obj->interface->method(_obj, ## __VA_ARGS__); \ }) 我用它在我的OO框架中方便地调用“实例方法”( https://github.com/jdolan/objectively ): $(array, addObject, obj); 工作老板。 不幸的是,我还没有想出一种允许嵌套这些调用的方法,这在某些情况下非常有用; 例如: /** * @see MutableSetInterface::addObjectsFromArray(MutableSet *, const Array *) */ static void addObjectsFromArray(MutableSet *self, const Array *array) { if […]

strstr()在gcc和VS中的实现是否具有线性复杂性?

我知道有快速的字符串搜索算法,如Boyer-Moore和Knuth-Morris-Pratt ,它们具有O(n + m)复杂度,而普通解决方案将是O(n * m)。 那么最流行的工具链(gcc和Visual Studio)的strstr()的实现是使用这些快速的O(n)算法,还是使用简单的解决方案?

为什么gcc不识别-rdynamic选项?

我收到了gcc编译错误: gcc-4.9: error: unrecognized command line option ‘-rdynamic’ 我在某些环境中使用-rdynamic测试了编译。 虽然我使用相同版本的gcc(4.9.2),但在某些环境中gcc运行良好,但其他(例如Homebrew gcc 4.9.2_1,cygwin 64bit)则没有。 有什么区别?