4
我正在編譯一個c庫(將被一個C++項目使用)和clang。嘗試鏈接此庫時,出現鏈接程序錯誤(特別是關於hqxInit函數的未定義符號)。當我切換到鏗鏘聲++,它的作品。使用nm進行檢查,clang ++會進一步調整名稱。發生了什麼 - 是否有更好的方式告訴鏈接器庫是爲了c而不是用於C++的?看來愚蠢必須建立與C++ C庫....建立圖書館時,clang和clang ++有什麼區別?
//內置鏗鏘
$ nm libhqx.a
libhqx.bak(init.c.o)
04000000 C _RGBtoYUV
00000004 C _YUV1
00000004 C _YUV2
00000000 T _hqxInit
//鏗鏘++
$ nm libhqx.a
libhqx.a(init.o):
00000100 S _RGBtoYUV
04000100 S _YUV1
04000104 S _YUV2
00000000 T __Z7hqxInitv
輝煌,謝謝! 「name mangling」是深入挖掘它的絕佳搜索詞。 –
您可以使用'--driver-mode'命令行參數來覆蓋clang/clang ++基於可執行文件的語言autodetect行爲。例如,'clang --driver-mode = g ++'應該等同於'clang ++'。 –