小编KJH*_*KJH的帖子

Mac OS中的ranlib/ar给了我"没有符号"的警告

我使用一个特定的库,它有几种编译方式(特定于平台和特定于目标的代码),因此,有时在归档中有完全空的.c文件; 代码简直就是#ifdef'd.这是完全理解的,而不是一个错误:我想这样.在Linux上,这确实不是问题.如果这是一个问题,链接器会捕获它.

然而,Mac OS上的ranlib/ar无法令人信服地压制这些文件的"无符号"警告.

现在,我是一名工程师,我想完全无警告地运行我的编译过程.这是将要评估的关键代码; 如果我有警告,人们会看着我好笑.是否有一些我忽略的东西?一些命令行选项?

谢谢,

KJ

c unix macos linker

9
推荐指数
2
解决办法
6213
查看次数

Gcc预处理器和粘贴

我前几天在stackoverflow上找到了这个片段(谢谢你):

#define PLATFORM 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y)  PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)

extern void PLATFORMSPECIFIC(somefunc)(char *x);
Run Code Online (Sandbox Code Playgroud)

用gcc -E编译,结果如下:

# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"





extern void somefunc_3(char *x);
Run Code Online (Sandbox Code Playgroud)

然而:

#define PLATFORM linux
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y)  PASTER(x,y)
#define PLATFORMSPECIFIC(fun) EVALUATOR(fun, PLATFORM)

extern void PLATFORMSPECIFIC(somefunc)(char *x);
Run Code Online (Sandbox Code Playgroud)

结果是:

# 1 "xx.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "xx.c"





extern void somefunc_1(char *x);
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让它返回'somefunc_linux'?克朗似乎做对了,顺便说一句.

c c++ gcc

6
推荐指数
1
解决办法
196
查看次数

标签 统计

c ×2

c++ ×1

gcc ×1

linker ×1

macos ×1

unix ×1