[问题] clang++编译时发生错误

楼主: x049 (joker)   2015-03-30 17:36:01
先提供linux版本为:Linux Mint 17 Qiana
小弟目前在做专题中需要用到字串转成位图印出,故参考以下网页
https://github.com/descent/progs/tree/master/cpp11_utf8
为了能编译,照着以下网页步骤安装了clang与libc++
http://www.cnblogs.com/codemood/p/3142848.html
有先编译hello world,顺利的成功了也能执行
clang++ -g -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/
-I/usr/include/c++/v1/include/ `freetype-config
作者: lantw44 (#######################)   2015-03-30 22:37:00
编 main1.o 的时候有加 -stdlib=libc++ 吗?
作者: kenduest (小州)   2015-03-30 22:58:00
hello 程式码编译要两行似乎多此一举clang++ -o main1 main.cppp ..... 不就可以了 ?若你没有其他特殊多个程式码要编译,不需要 -c 然后分开http://i.imgur.com/nV5c9Ga.png另外你的问题我比较想知道的是,你编译一般的 c++ 程式能够正常工作吗?
楼主: x049 (joker)   2015-03-30 23:51:00
我是因为这个程式才去装linux ,还是新手看不太懂指令编译k大说的编译一般c++程式是说用上面clang++指令编译吗?
作者: kenduest (小州)   2015-03-31 00:00:00
这样说好了,原本没有修改的版本,你可以正常编译吗是的,用 clang++ 编译一般的 c++ code
楼主: x049 (joker)   2015-03-31 00:08:00
我试过只要有用到 -stdlib=libc++ 就会跳出一样的错误用c++版本的hello world也会跳出错误
作者: lantw44 (#######################)   2015-03-31 00:14:00
有点好奇是为了什么功能才装 libc++ 的吗?
楼主: x049 (joker)   2015-03-31 00:18:00
在 wstring2utf8.h 里有个<codecvt> 好像只有clang libc++有k大的那张图我有照着编译,第一个原版的编译跳出了好几行未参考定义到,第二个编译结果错误码与图上的差不多第3个结果跟第一个一样跳出好几行未参考定义到
作者: lantw44 (#######################)   2015-03-31 00:27:00
用 clang++ -v 看看 #include 搜寻路径感觉可能他先搜到 libstdc++ 的了
楼主: x049 (joker)   2015-03-31 00:35:00
https://mega.co.nz/#!c4kxTLKK!VP3L-bZwvyTcRAeld1_OvYC3flX8xX6MLk9FfmpPSeQ 这是我clang++ -v的结果
作者: lantw44 (#######################)   2015-03-31 00:39:00
clang++ -v 后面接本来拿来编译的参数-I 那些也都要,真的有编译东西它才会显示搜寻路径
楼主: x049 (joker)   2015-03-31 00:51:00
https://mega.co.nz/#!10tG0TzR!8AQVN4o51u-CynUN3VjDTRH6i9DgEMfM41obJ6bjl2A 结果很长 所以就上传txt档
作者: sunneo (艾斯寇德)   2015-03-31 00:52:00
因为codecvt不在标准内,你该考虑boost的utf_to_utf
楼主: x049 (joker)   2015-03-31 00:58:00
如果使用boost的utf_to_utf是单纯更动wstring2utf8.h档吗?
作者: lantw44 (#######################)   2015-03-31 01:25:00
刚看到 gcc 5 已经有 codecvt 了,可以尝试看看http://libcxx.llvm.org/ 有说在 Linux 可能要多加参数
楼主: x049 (joker)   2015-03-31 01:44:00
看不太懂要加哪些参数我打了 clang++ -o main1 main1.cpp -stdlib=libc++ hellowod.cpp -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc 但出现找不到-lc++abi 上面那个helloworld.cpp多打的
作者: kenduest (小州)   2015-03-31 02:54:00
为何你要加上 -nodefaultlibs 这个参数 @@
楼主: x049 (joker)   2015-03-31 02:56:00
我看不太懂,照网页上的参数打在Using libc++ in your programs的linux下有两种我是参考那个的
作者: kenduest (小州)   2015-03-31 03:08:00
没关系,一般不用,不过你后面有指定其他的 lib 就还好另外感觉你这程式好像搞很久了...我这边测试过都是在 mac os x 环境,clang 本身没问题clang 是 xcode 提供的,都可以正确编译
作者: lantw44 (#######################)   2015-03-31 03:09:00
我在 FreeBSD 测试,clang 默认用 libc++ 也很正常
作者: kenduest (小州)   2015-03-31 03:10:00
boost 有替代方案,程式码简单改一下就好只是重点你系统还需要有一份 boost
楼主: x049 (joker)   2015-03-31 03:10:00
主要都卡在linux跟clang++才编译不过去吧,main的程式码倒是读懂了
作者: kenduest (小州)   2015-03-31 03:20:00
这样吧.. 我刚刚帮你改一下改用 boosthttp://x.co/8f16Z 这是那个 wstring2utf8.h 档案内容记得你应该会用 apt-get install 装上 boost 相关套件我这边是装上 libboost1.55-dev 就可以了
楼主: x049 (joker)   2015-03-31 03:23:00
感谢大大,小弟正在安装boost中,想问编译时需要怎么下指令呢
作者: kenduest (小州)   2015-03-31 03:27:00
忘记说还要装 libboost 这个 lib, 上面那是标头档案最后 -l 不要忘记加上像是: -lboost_thread结论我这边 apt 装上 libboost1.55-dev libboost1.55都懒用 mac os x or freebsd 应该也是解法 XD
楼主: x049 (joker)   2015-03-31 05:13:00
终于成功了,感谢大大,小弟在这里linux跟clang卡好久了

Links booklink

Contact Us: admin [ a t ] ucptt.com