小编man*_*hiz的帖子

在Mac OS X上链接不同的C++标准库

现在Mac OS X上可以存在多个C++标准库,现在看起来非常混乱.根据/sf/answers/592045961/,混合libstdc ++和libc ++将导致链接错误,这会捕获这样的危险情况并且是一件好事.

另一方面,还有两种情况需要更多调查,我在github gist(https://gist.github.com/manphiz/7195515)中为此创建了一些测试用例.它确认混合链接到libstdc ++(来自系统或vanilla GNU GCC)和libc ++(系统)的动态库将导致链接错误.但是,如果一个动态库链接到系统libstdc ++,而另一个动态库链接到vanilla GNU GCC libstdc ++,然后将它们链接到二进制文件也可以工作,对于我的简单测试用例,它甚至可以在运行时工作.

$ make -f Makefile.system_gnu 
g++-4.8 -g -Wall -fPIC -o main.o -c main.cc
g++-4.8 -g -Wall -fPIC -o test_a.o -c test_a.cc
g++-4.8 -dynamiclib -o libtest_a.dylib test_a.o
clang++ -g -Wall -fPIC "-stdlib=libstdc++" -o test_b.o -c test_b.cc
clang++ -dynamiclib "-stdlib=libstdc++" -o libtest_b.dylib test_b.o
g++-4.8 -o test main.o -L. -ltest_a -ltest_b

$ ./test
main_test_a_test_b
Run Code Online (Sandbox Code Playgroud)

所以这里需要建议:

  • 我们可以混合系统libstdc ++和手动构建的GNU GCC libstdc ++吗?如果没有,什么时候会引起麻烦?
  • 我们可以混合使用系统libc ++和手动构建的Clang libc ++吗?如果没有,什么时候会引起麻烦? …

c++ macos std libstdc++ libc++

10
推荐指数
1
解决办法
7397
查看次数

标签 统计

c++ ×1

libc++ ×1

libstdc++ ×1

macos ×1

std ×1