怎么在C语项目中调用c++代码

  介绍

本篇文章给大家分享的是有关怎么在C语项目中调用c++代码,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

c++代码调用C代码很简单,只要分别在包含的C头文件的开头和结尾加上如下的两个块:

# ifdef  __cplusplus   extern “C", {   # endif

# ifdef  __cplusplus   }   # endif

即可。

然而为了支持类,重载等更加高级的特性,在编译c++代码时,c++符号会被修饰。我们转储Linux平台加密库libcrypto + +的符号表,可以看到如下的内容:

,美元readelf  -s /usr/lib/libcrypto + + . so   Symbol  table  & # 39; .dynsym& # 39;, contains  9607年,条目:   ,Num: Value ,, Size  Type  Bind  Vis  Ndx 名称   ,,0:0000000000000000,,0,NOTYPE  LOCAL  DEFAULT  UND    ,,1:00000000001 daa58 , 0, SECTION  LOCAL  DEFAULT  9,   2:才能,0000000000000000,,0,OBJECT  GLOBAL  DEFAULT  UND  _ZTIi@CXXABI_1.3  (2)   3:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  __errno_location@GLIBC_2.2.5  (3)   4:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZSt18uncaught_exceptionv@GLIBCXX_3.4  (4)   5:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZNSt8__detail15_List_node_base7_M_hookEPS0_@GLIBCXX_3.4.15  (5)   6:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  getservbyname@GLIBC_2.2.5  (6)   7:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  bind@GLIBC_2.2.5  (6)   ,,8:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@GLIBCXX_3.4  (4)   9:才能,0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  __longjmp_chk@GLIBC_2.11  (7)   ,10:0000000000000000,,0,OBJECT  GLOBAL  DEFAULT  UND  _ZTIh@CXXABI_1.3  (2)   ,11:0000000000000000,,0,OBJECT  GLOBAL  DEFAULT  UND  _ZTVSt9basic_iosIcSt11char_traitsIcEE@GLIBCXX_3.4  (4)   ,12:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  socket@GLIBC_2.2.5  (6)   ,13:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4  (4)   ,只只只只只。   ,86:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZNSo5writeEPKcl@GLIBCXX_3.4  (4)   ,87:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  malloc@GLIBC_2.2.5  (6)   ,88:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E@GLIBCXX_3.4  (4)   ,89:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZNSi5seekgElSt12_Ios_Seekdir@GLIBCXX_3.4  (4)   ,90:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  pthread_key_delete@GLIBC_2.2.5  (3)   ,91:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  shutdown@GLIBC_2.2.5  (6)   ,92:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  _ZSt15set_new_handlerPFvvE@GLIBCXX_3.4  (4)   ,93:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  pthread_getspecific@GLIBC_2.2.5  (3)   ,94:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  strcmp@GLIBC_2.2.5  (6)   ,95:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  strtol@GLIBC_2.2.5  (6)   ,96:0000000000000000,,0,FUNC  GLOBAL  DEFAULT  UND  ioctl@GLIBC_2.2.5  (6)   ,只只只只只。   ,186:00000000002 c5a80  142年,FUNC  GLOBAL  DEFAULT  12 _ZN8CryptoPP6xorbufEPhPKhS2_m   ,187:00000000002 fd6d0 , 9, FUNC  WEAK  DEFAULT  12 _ZN8CryptoPP21InvertibleRSAFunction9BERDecodeERNS_22BufferedTransformationE   ,188:00000000001 ea840  73年,FUNC  GLOBAL  DEFAULT  12 _ZN8CryptoPP13Base64Decoder22GetDecodingLookupArrayEv   ,189:0000000000249760,,6,FUNC  WEAK  DEFAULT  12 _ZThn8_N8CryptoPP13DL_SignerImplINS_25DL_SignatureSchemeOptionsINS_5DL_SSINS_13DL_Keys_ECDSAINS_4EC2NEEENS_18DL_Algorithm_ECDSAIS4_EENS_37DL_SignatureMessageEncodingMethod_DSAENS_6SHA256EiEES5_S7_S8_S9_EEED0Ev   ,190:0000000000278 b60  86年,FUNC  WEAK  DEFAULT  12 _ZN8CryptoPP8Rijndael3DecD1Ev   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在C语项目中调用c++代码