所以,这个API提供了以下目录,我将其放在一个名为include的文件夹中,与我的makefile处于同一级别:
libmyapi.a
api/api.h
我的主要源文件是src/myapp.c,它包含了使用
#include "api/api.h"
的API。我的make命令是(还有一些标志,我没有列出来,因为我认为它们在这里不相关):
gcc -Linclude -lmyapi -Iinclude src/myapp.c -o lib/myapp.sp -lrt
我遇到的问题是api.h文件中包含了对命名空间等的引用。例如,在某个地方它有:
namespace MyAPI {
namespace API {
typedef SimpleProxyServer SimpleConnection;
}
}
显然,C编译器不知道这是什么意思。
所以,我假设我需要使用C++编译器进行编译,但后来有人说我不需要,我只需要在代码中添加"extern 'C'",但我真的不太明白。在网上阅读了一些资料后,我还是没有更进一步。
我需要用C++编译吗(例如使用g++)?
我需要给代码添加"extern 'C'"吗?那是什么意思?我只需要这样做吗:
#ifdef __cplusplus
extern "C" {
namespace MyAPI {
namespace API {
typedef SimpleProxyServer SimpleConnection;
}
}
}
#endif
或者我只是把这些句子包起来
namespace MyAPI {
namespace API {
然后它们对应的}}是什么意思?
头文件调用其他头文件,所以可能我需要在很多地方做这个。
到目前为止,我尝试了各种变化,都遇到了错误和警告,但我不知道是我包装错了,设置了错误的g++编译器标志,使用了错误的编译器,还是其他原因!如果我知道要使用的方法,至少我可以开始调试。
extern "C"
是不太可能成功的。 - molbdnilo