mt.exe を駆使して、アセンブリの情報を DLL に埋め込むのは
C:> mt -manifest hoge.dll.manifest -outputresource:hoge.dll;2という感じでいけるという事がわかったのだけども、デフォルトで作成される hoge.dll.manifest の中身がいただけない。
<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='asInvoker' uiAccess='false' /> </requestedPrivileges> </security> </trustInfo> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> </assembly>vc9 は sp1 なので、version='9.0.30729.1' というようになっていなければならないのである。これ、毎回手動で直せって事?どうにも、この辺の情報がよくわからなくて腹が立つ。
何が起こっているか?推理しているところ・・・。
zlib は Visual Studio でコンパイルしたから、msvcr90.dll は 9.0.30729.1 っぽい。
それに対して libtiff では nmake でコンパイルし、mt うんぬんしたらか、msvcr90.dll と msvcp90.dll が 9.0.21022.8 っぽい。
結果、コンフリクトして msvcp90.dll が見つかりまへん・・・と、なっているのではないか?それっぽい痕跡が、ここ。
他にも、共通言語ランタイムを有効にして開発している場合に、Visual Studio で UNICODE を指定しようが、マルチバイトを指定しようが、問答無用で UNICODE が選定されてしまい、std::ifstream が問答無用で ワイド・キャラの変換をかけるみたいなのも、むかつく。
0 件のコメント:
コメントを投稿