c/c++语言开发共享在C项目中使用特征

我正在研究从互联网上获得的一个C项目,我正在尝试为涉及线性代数的项目添加一些函数。 在我之前的C ++作品中,我通常依赖Eigen进行线性代数。

有没有办法将Eigen用于C项目? 如果是的话,我该怎么做才能做到这一点? (简单地添加Eigen头文件是不够的,因为例如标准C ++文件不会自动包含)

    Eigen是一个大量使用C中没有的C ++特性的库。因此,它不能直接从C翻译单元使用。

    但是,您可以使用Eigen将部件包装在单独的共享库中并公开C接口。 这是一个如何编写这样一个库的小例子。

    图书馆界面

    /* foo.h */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void foo(int arg); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ 

    默认情况下,C ++对导出函数的名称使用与C不同的修改规则。 我们使用extern "C"来指示C ++编译器使用C规则。 因为C ++和C编译器都会看到接口文件,所以我们将#ifdefextern声明包装起来,这只会触发C ++编译器。

    图书馆实施

     /* foo.cpp */ #include "foo.h" #include  extern "C" { void foo(int arg) { std::cout << arg << std::endl; } } /* extern "C" */ 

    我们还需要在接口的定义中定义C链接。 除此之外,您可以在实现中使用您喜欢的任何C ++特性(包括Eigen)。

    C项目

     /* main.c */ #include "foo.h" int main() { foo(42); return 0; } 

    包括接口标头并像使用任何其他C库一样使用它。

    建造

     $ g++ foo.cpp -shared -fPIC -o libfoo.so $ gcc main.c -L. -lfoo -o main 

    使用C ++编译器构建共享库libfoo.so 。 使用C编译器构建主程序,链接到共享库。 确切的构建步骤可能因编译器/平台而异。

    需要了解更多c/c++开发分享在C项目中使用特征,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享在C项目中使用特征相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979447.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐