2012年9月6日 星期四

用 c 來呼叫 c++ std::map

看到這篇問題:
標題: [問題] 將cpp程式包成.o檔,給予c主程式使用:
http://www.ptt.cc/bbs/C_and_CPP/M.1346230896.A.B0B.html

我也很有興趣, 之前沒這樣想過, 因為只要用 c++ compiler 然後用 c 的部份就可以完成使用 c 而達到使用 std::map 的目的。

就算我寫純 c, 我也大都使用 c++ compiler。能通過 c++ compiler, 有很大機會在 c compiler 應該也沒問題。

但是文章內容看來則是希望使用 c compiler 來 link c++ std::map 的程式碼。

我想知道怎麼做, 參考 https://gist.github.com/3516034 我修改了部份程式和 makefile, 除了 compile c++ 程式外, .c 檔都用 c compiler, 這樣應該比較像是在用 c compiler link std::map。

makefile
main.out: main.o map.o
        gcc main.o map.o -o main.out -lstdc++

main.o: main.c
        gcc -c main.c -o main.o

map.o: map.cpp
        g++ -c map.cpp -o map.o

clean:
        rm -f *.o *.out 

組合語言面前沒有秘密, 最近透過反組譯看了不少 c++ code, 大概可以理解為什麼 c 可以使用 c++ class。那 c 可以使用 java, python code 嗎?

看起來應該可以, 不過我沒研究 java, python, 所以不知道其原理。

ref:
How to Call Java Functions from C Using JNI
calling Python function from C/C++

github source code:
https://github.com/descent/progs
cd c_use_cpp_clas

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。