给定一些 C++ 函数(使用 STL),您可以在具有未使用 C++ 编译器编译的 main 函数的程序中使用它们吗?你能避免将该程序与 C++ 编译器联系起来吗?
我知道接口必须是外部“C”函数并且它们不应该抛出异常。
通过搜索网络,我发现许多来源暗示这是不可能的,例如:
- http://www.gnu.org/software/libtool/manual/html_node/C_002b_002b-libraries.html#C_002b_002b-libraries “因此,运行 ld 链接 C++ 程序或库被视为失败。”
- http://www.velocityreviews.com/forums/t591272-re-linking-ac-program-to-ac-library-which-uses-stl.html “调用 C++ 库的 C 主程序命运多舛开始”
但我也发现了这个: http ://wewantarock.wordpress.com/2010/11/01/working-around-the-static-libstdc-restriction/
我是这样理解的:解决方法是构建一个共享库。您使用 C++ 编译器链接共享库,而共享库本身就是一种“程序”(具有 DLLMain 之类的启动/拆卸函数,而不是普通的 main 函数)。使用共享库的程序不需要知道它是一个 C++ 库。
我理解正确吗?
有什么问题吗?
编辑1:我试过了 - 成功。我用 libtool 构建了我的共享库,并且可以通过与普通的链接来使用它
cc c_main_program.o -lmy_cpp_library -o c_main_program
更新的问题,在成功的实验之后:是否有任何让我感到惊讶的问题(例如在其他平台上,或者当我在全局变量中使用构造函数时,......)