c/c++语言开发共享编译和链接C和C ++文件

我想从C文件中调用C ++函数,我已经阅读了有关extern“C”构造和包装器API的内容。 但是,我不确定如何组织各种头文件以及如何链接目标文件。

假设我有一个C文件MyProg.c及其相应的头文件MyProg.h

现在,我创建了两个文件Wrapper.cppWrapper.h ,它们声明了我希望从MyProg.c调用的函数。

// Wrapper.h #include "Utility.h" #ifdef __cplusplus extern "C" { #endif void func_to_invoke(); #ifdef __cplusplus } #endif 

请注意,Wrapper.h包含一个包含其他实用程序C ++函数的文件。

问题是如何编译和链接文件。 我应该做以下事情:

 g++ -c Utility.cpp Utility.h g++ -c Wrapper.cpp Wrapper.h Utility.h gcc -c MyProg.c MyProg.h Wrapper.h gcc MyProg.o Wrapper.o 

编辑:

我尝试过以下内容,但仍然无法编译。 我有与C ++库相关的页面和错误页面。 我是否还要在__cplusplus宏中声明Utility.h中的所有函数?

 g++ -c Utility.cpp g++ -c Wrapper.cpp gcc -c MyProg.c g++ MyProg.o Wrapper.o Utility. 

解:

必须从Wrapper.h中删除Utility.h并将其包含在Wrapper.cpp中

    不要在Wrapper标头中包含.cpp文件。 这完全是错误的做法。 甚至不包括Utility.h标头。 只需定义您的包装函数。 然后在Wrapper.cpp中包含Utility.h头文件并定义包装器函数。

    如果您的C ++代码使用exception或运行时类型信息,则需要使用g ++进行最终链接。 您的程序将需要C ++支持库。

    我会这样写:

     g++ -c Utility.cpp g++ -c Wrapper.cpp gcc -c MyProg.c g++ -o MyProg Utility.o MyProg.o Wrapper.o 

    一旦你将Wrapper.cpp编译成目标代码,它的内容是否先前用C或C ++编写并不重要,只要你使用extern "C"告诉编译器跳过func_to_invoke名称func_to_invoke

    如果我记得很清楚, gccg++都可以检测他们的输入文件是否包含C或C ++代码并做正确的事情,但gcc将链接C标准库和g++与C ++的链接,所以你最终可能会丢失一些function。

    我认为最好的做法是将gcc用于任何不使用任何C ++特性的东西 ,就像C一样, g++用于其他所有东西。

    你应该在最后一行包括Utility.o.

      以上就是c/c++开发分享编译和链接C和C ++文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐