介绍
本篇文章给大家分享的是有关怎么在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++代码