C调用C++接口

在android系统中C++层可通过以下接口输出调用栈:

android::CallStack stack;
stack.update();
stack.dump("");

 

但是如果在调用C层(linux用户空间)代码,如果也想使用C++层CallStack类的接口来输出调用栈,则需要做出以下修改:

1:修改CallStack源文件

     主要是将相关接口封装成一个C程序可调用的函数,下面将其封装成了void c_dump_statck(char * tag)

frameworks/native/libs/utils/CallStack.cpp

index 18fd84f..5ad2455 100644
--- a/libs/utils/CallStack.cpp
+++ b/libs/utils/CallStack.cpp
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#ifdef __cplusplus
 #define LOG_TAG "CallStack"
 
 #include <string.h>
@@ -104,7 +104,7 @@ void CallStack::dump(const char* prefix) const {
         char line[MAX_BACKTRACE_LINE_LENGTH];
         format_backtrace_line(i, &mStack[i], &symbols[i],
                 line, MAX_BACKTRACE_LINE_LENGTH);
-        ALOGD("%s%s", prefix, line);
+        ALOGE("%s%s", prefix, line);
     }
     free_backtrace_symbols(symbols, mCount);
 }
@@ -127,3 +127,9 @@ String8 CallStack::toString(const char* prefix) const {
 }
 
 }; // namespace android
+#endif
+extern "C" void c_dump_statck(char* tag){
+    android::CallStack stack;
+    stack.update();
+    stack.dump(tag);
+}

 

2:修改头文件,防止在编译C程序时,编译不过,因此使用__cplusplus来隔离C++内容

frameworks/native/include/utils/CallStack.h

diff --git a/include/utils/CallStack.h b/include/utils/CallStack.h
index 079e20c..d23d5ed 100644
--- a/include/utils/CallStack.h
+++ b/include/utils/CallStack.h
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#ifdef __cplusplus
 #ifndef ANDROID_CALLSTACK_H
 #define ANDROID_CALLSTACK_H
 
@@ -69,6 +69,7 @@ private:
 }; // namespace android
 
 
-// ---------------------------------------------------------------------------
+// --------------------------------------------------------------------------
 
 #endif // ANDROID_CALLSTACK_H
+#endif

 

3:重新编译CallStack所在的动态库,这里是libutils.so,产生新库后,将其push下系统中。

4:使用void c_dump_statck(char * tag)

现在假设要在external/bluetooth/bluedroid/  目录下的文件中使用访函数

a:修改Android.mk

diff --git a/main/Android.mk b/main/Android.mk
index 8ecb3c3..cd200ec 100644
--- a/main/Android.mk
+++ b/main/Android.mk
@@ -115,8 +115,8 @@ LOCAL_SHARED_LIBRARIES := \
     libcutils \
     libpower \
     libbt-hci \
     libbt-utils
+    libutils

 

b:调用

在相关的C源文件中,使用以下方式调用:

extern void c_dump_statck(char *);

c_dump_statck("uyiwfn");

你可能感兴趣的:(C调用C++接口)