プロが教えるわが家の防犯対策術!

glibcでワイド文字のバイト数を恣意的に変更してmakeするときの方法を
ご存知の方がいましたら教えてください。

glibcを使い、ワイド文字=4バイトのLinux環境下で、ワイド文字=2バイトとして
wchar系ライブラリ関数が使えるようコンパイルしたいと思っています。

makeするときに何かしら指定するオプションがあったりするのでしょうか。
それともソースの一部を触ってコンパイルしないといけないでしょうか。


同じソースから出来てると思われるLinuxとcygwinで、それぞれワイド文字が
4バイトと2バイトと違う形で環境が作られてるので、何かしら切り替える
方法があると思うのですが...

makefile、configure系ファイルをざっと見てみましたが、それっぽい指定が
できそうなキーワードを検索で見つけられませんでした。


なんでそんな事を考えているかというと、当Linux環境下で動くアプリが
Unicodeは1文字2バイト固定で、長い文字列を含むデータを作成するのです。
そのような状況で、iconvなどを使って一度全文字UCS-4に変えてから
wcs系関数を使うと、無駄が多いと思い、できればUCS-2として直接
データを扱えるようにしたいと思ったのです。
(競合対策のため、性能を第一優先としたい)

A 回答 (1件)

一応、gccに-fshort-wcharオプションを指定してコンパイルすればwchar_t型をunsigned short intと同じサイズになりますが、それだけでまともに動くかどうかは十分な検証が必要です。



> 同じソースから出来てると思われるLinuxとcygwinで、それぞれワイド文字が
> 4バイトと2バイトと違う形で環境が作られてるので、何かしら切り替える
> 方法があると思うのですが...

GCC自体のソースは共通ですが、Cygwinの標準ライブラリはnewlibですのでglibcと同じではありません。

> そのような状況で、iconvなどを使って一度全文字UCS-4に変えてから
> wcs系関数を使うと、無駄が多いと思い、できればUCS-2として直接
> データを扱えるようにしたいと思ったのです。

wcs系の関数程度なら自作してもしれています。
(C++11やC11ならchar16_tで統一してもよいですが、そこまでしなくてもよいでしょう)
ちょっと面倒なのはwcscollとwcsxfrmぐらいですが、これらを使う機会はそう多くないはずです。
    • good
    • 0
この回答へのお礼

おススメしてくれた通り、wcs系関数に代替する関数を一式作りました。ありがとうございます。

コーディングはラクだったのですが、こういうライブラリ系関数は、テストにとても苦労しますね。
ライブラリは汎用性が高い分、テストケースも膨れ上がるという。

返事がとても遅くなりすみません。しばらくログインできない状態になって...
あのアカウント確認時のキャプチャ、画像が2つ出るけど、どうやって画像中の文字を記述したらよいのかわかりませんよね。w

お礼日時:2013/09/17 04:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!