【发布时间】:2012-10-03 23:05:52
【问题描述】:
给定一些 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-a-c-program-to-a-c-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
更新问题,实验成功后:有没有什么catch可以 稍后让我感到惊讶(例如在其他平台上,或者当我在全局变量中使用构造函数时,......)
【问题讨论】:
标签: c++ c dll shared-libraries