我正在使用 C++ 中的 C 库 (libgretl),它的一些函数与我的代码冲突,所以我想将它包装在命名空间中,如下所示:
namespace libgretl {
extern "C" {
#include <gretl/libgretl.h>
}}
但是,这无法编译,我从 gcc 文件中收到“未定义”错误(在 Windows 上使用 mingw32 和 gcc 4.5.2)。
第一个错误来自文件 c++/cstddef 的以下代码块:
_GLIBCXX_BEGIN_NAMESPACE(std)
using ::ptrdiff_t;
using ::size_t;
_GLIBCXX_END_NAMESPACE
其中宏分别扩展为namespace std {
and }
。这些之后还有更多错误。
省略extern "C"
指令没有帮助。使用匿名命名空间可以减少错误数量,但仍然无法编译。
因此,我的问题是,是否有某种方法可以包含这样的 C 库并将其函数放入命名空间中,而不更改 gcc 或库的源文件?
Thanks.
Michal
你做不到。命名空间不仅仅是源代码装饰,它们被编译器破坏为对象符号。
库中的本机 C 函数 foo() 可通过目标文件中的符号 _foo 来使用,但调用 bar::foo() 将生成对 @N3barfoo 等的引用。结果,将发生链接器错误。
您可以在单独的源文件中创建“代理”函数,仅在此源中包含原始库头,并将所有代理函数放入命名空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)