つぶつぶなるままに

物理とかプログラミングとか

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

C1033: プログラム データベース '' を開けません。

Visual Studio 2010 Professional を Windows 7 64bit へインストールしたところ、表題のエラー
CL : fatal error C1033: プログラム データベース '' を開けません。
が出てコンパイルができなかった。

新規に空のプロジェクトから作成した Hello, World! でもこのエラーが出るので、コードの問題ではない。
また、コンソールから cl を直に打てばコンパイルできることから、コンパイラ・リンカの問題でもない。
つまり、VS2010 の IDE の問題。

色々試したところ、私の環境では devenv.exe を「Windows 7」の互換モードで実行すれば解決することが分かった。

  1. C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE に(デフォルトでは)ある devenv.exe のプロパティを開く。

  2. 「互換性」タブを開く。

  3. 「互換モード」で「互換モードでこのプログラムを実行する」をチェック。

  4. ドロップダウンリストから「Windows 7」を選択してプロパティを閉じる。

Windows 7 上で Windows 7 の互換モードって何だ……と思いますが、とにかくこれで解決します。

cf.

私の環境では、上記の方法が解決策でしたが、C1033 で検索してみると他の方法で解決した、という報告もちらほら見つかります。折角なのでリストアップしておきます。

追記
互換モードは「Windows 7」でなくても、「Windows 2008 Server」および「Windows Vista」でも上手く動くみたいです。つまり、Windows の内部バージョン 6.x のものなら O.K. ということのようです。

テーマ:プログラミング - ジャンル:コンピュータ

Fortran 95 で分割コンパイル

富士通の Fortran 95 コンパイラ frt で、モジュールを別ファイルにして分割コンパイルを行う場合、-c オプションと同時に -Am オプションが必要。

mod.f95
module hoge
  implicit none
  integer, parameter :: foo = 100
end module hoge

main.f95
program main
  use hoge
  implicit none
  print *, foo
end program main

これを frt でコンパイルするには
% frt -Am -c mod.f95
% frt -Am -c main.f95
% frt -o main main.o mod.o
とする。

-Am オプションを付けて mod.f95 をコンパイルすると、モジュール hoge についての情報が hoge.mod という中間ファイルに出力される。
-Am オプションをつけて main.f95 をコンパイルすると、モジュール hoge についての情報を hoge.mod から読んで適切に処理してくれるようになる。

モジュールの定義も呼び出しも含まないようなファイルのコンパイルでは -Am は無視されるみたいなので、とりあえず -c のところを -Am -c としておけば問題ない。

#
GNU gfortran は -c オプションだけでも勝手に module を認識して hoge.mod を作ってくれるみたい。(て言うか何故 frt はそうなっていないんだ……)

cf.
富士通製Fortranコンパイラの使い方

テーマ:ソフトウェア - ジャンル:コンピュータ

patch-2.6 (Solaris 10 + gcc)

Solaris 10 + gcc 環境で patch-2.6 をインストール。
% tar xvfJ patch-2.6.tar.xz
% cd patch-2.6
% env CFLAGS="-O2 -s" ./configure
% gmake
./update-version.sh: syntax error at line 24: `(' unexpected
gmake: *** [VERSION] Error 2
update-version.sh というスクリプトでエラー。とりあえず当該部の if 構文ブロックをコメントアウト。
% cp -p update-version.sh update-version.sh.org
% emacs update-version.sh
% diff update-version.sh.org update-version.sh
23,25c23,25
< if test "`expr substr "$1" 1 1`" = v ; then
< set -- "`expr substr "$1" 2 "(" length "$1" - 1 ")"`" "$2"
< fi
---
> # if test "`expr substr "$1" 1 1`" = v ; then
> # set -- "`expr substr "$1" 2 "(" length "$1" - 1 ")"`" "$2"
> # fi
これで gmake すると、とりあえず次に進む。 (update-version.sh は git 関連の何かをやるスクリプトみたいなので、多分、無視してもそんなに影響ないと思う。多分)
% gmake
:
:
gcc -std=gnu99 -o src/patch -O2 -s gl/lib/argmatch.o gl/lib/backupfile.o gl/lib/basename.o gl/lib/dirname.o gl/lib/stripslash.o gl/lib/error.o gl/lib/exitfail.o gl/lib/getopt.o gl/lib/getopt1.o gl/lib/hash.o gl/lib/quote.o gl/lib/quotearg.o gl/lib/safe-write.o gl/lib/xmalloc.o gl/lib/xstrndup.o gl/lib/full-write.o src/merge.o src/inp.o src/maketime.o src/partime.o src/patch.o src/pch.o src/quotesys.o src/util.o src/version.o
Undefined first referenced
symbol in file
strndup gl/lib/xstrndup.o
ld: fatal: Symbol referencing errors. No output written to src/patch
collect2: ld returned 1 exit status
gmake: *** [src/patch] Error 1
strndup 関数が見付からない、というエラー。
この strndup という関数は C 標準関数 strdup 関数の GNU 拡張らしいのですが、何故か私の管理してる Solaris サーバの gccでは使えませんでした。
というわけで、strndup 関数をコードで用意します。実は、patch-2.6 の tar ball の中に gl/lib/strndup.c として strndup 関数のコードが存在します。これを一緒にコンパイルしてやればいいだけなのですが、この strndup.c の中で、strndup 関数と同様に GNU 拡張である strnlen 関数が使用されているため、この strndup.c はそのままでは使えません。(何のためのファイルなんだろう……?)
というわけで、strnlen 関数をソースから用意します。Google で検索したらそれっぽいコードが見付かったので、これを strndup.c にコピペ。
% emacs gl/lib/strndup.c
% less gl/lib/strndup.c
/* A replacement function, for systems that lack strndup.

Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007
Free Software Foundation, Inc.

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */

#include <config.h>
#include <string.h>
#include <stdlib.h>

static size_t strnlen(const char *s, size_t max) {
register const char *p;
for(p = s; *p && max--; ++p);
return(p - s);
}

char *
strndup (char const *s, size_t n)
{
size_t len = strnlen (s, n);
char *new = malloc (len + 1);

if (new == NULL)
return NULL;

new[len] = '\0';
return memcpy (new, s, len);
}
で、この strndup.c が gmake でコンパイル、リンクされるように Makefile を書き換える。
具体的には、LIBOBJS に strndup を追加する。
% cp -p Makefile Makefile.org
% emacs Makefile
% diff Makefile.org Makefile
42c42
< LIBOBJS = ${LIBOBJDIR}argmatch$U.o ${LIBOBJDIR}backupfile$U.o ${LIBOBJDIR}basename$U.o ${LIBOBJDIR}dirname$U.o ${LIBOBJDIR}stripslash$U.o ${LIBOBJDIR}error$U.o ${LIBOBJDIR}exitfail$U.o ${LIBOBJDIR}getopt$U.o ${LIBOBJDIR}getopt1$U.o ${LIBOBJDIR}hash$U.o ${LIBOBJDIR}quote$U.o ${LIBOBJDIR}quotearg$U.o ${LIBOBJDIR}safe-write$U.o ${LIBOBJDIR}xmalloc$U.o ${LIBOBJDIR}xstrndup$U.o ${LIBOBJDIR}full-write$U.o
---
> LIBOBJS = ${LIBOBJDIR}argmatch$U.o ${LIBOBJDIR}backupfile$U.o ${LIBOBJDIR}basename$U.o ${LIBOBJDIR}dirname$U.o ${LIBOBJDIR}stripslash$U.o ${LIBOBJDIR}error$U.o ${LIBOBJDIR}exitfail$U.o ${LIBOBJDIR}getopt$U.o ${LIBOBJDIR}getopt1$U.o ${LIBOBJDIR}hash$U.o ${LIBOBJDIR}quote$U.o ${LIBOBJDIR}quotearg$U.o ${LIBOBJDIR}safe-write$U.o ${LIBOBJDIR}xmalloc$U.o ${LIBOBJDIR}xstrndup$U.o ${LIBOBJDIR}full-write$U.o gl/lib/strndup$U.o
これで、gmake が通ります。あとは gmake check, gmake install で終了。
% gmake
% gmake check
% chmod 755 install-sh
# gmake install
% patch --version
patch 2.6
なお、gmake check を通すには、GNU coreutils の seq, touch, date, cat が必要みたいです。
また、install-sh に何故か実行ビットが立っていなかったので、gmake install の前に chmod +x が必要です。

テーマ:ソフトウェア - ジャンル:コンピュータ

デュアルディグリー始動

来年度また1年生になることになりました!

と言っても、留年したわけではなく。

来年度から私の所属する数理物質科学研究科物理学専攻と、システム情報工学研究科コンピュータサイエンス専攻の間でデュアルディグリープログラムが実施されることになっていて、これに申請して合格したというわけです。

もちろん、コンピュータサイエンス専攻の入学試験はちゃんと受けましたよ。数学の問題でひどい計算ミスをしてしまって、合格してるか少し不安だったのですが、何とか受かってました^^


デュアルディグリープログラムに在籍するとなると、日々の生活はどう変化するのだろう? まず、博士前期課程の講義を履修することになる。それからゼミも2倍になる。読むべき文献も増える。研究と称してぼけーっとする時間も2倍にしないといけない! ……少なくとも今のままの頭の使い方・時間の使い方では、破綻すること間違いなし(笑) ちょっと、Life Hack が必要ですね。


研究室が2つってことは、机と PC も2つになるのかなー。研究できる場所が2つあるってのは、気分転換的な意味ですごく嬉しいかもしれない。

テーマ:大学院 - ジャンル:学校・教育

Opera のパネルの×ボタン

Opera を 9.5 にアップグレードしたら、パネルの×ボタン(下図)がなぜか無効化されていて、使えなくなっていた。
パネルの×ボタン(無効)
結構使うボタンだったので、不便だなー、と思いつつ、パネルトグルとか F4 キーとかで何とか誤魔化していた。

で、さっきたまたまパネルのカスタマイズをしていて、この×ボタンを削除してしまった。

「どうせ使えなかったんだし、消したままでいいか」と一瞬思ったのだけれど、ふと気になって新しい×ボタンを配置してみた。すると、
パネルの×ボタン(有効)
なぜか使えるようになった!

"Opera パネル ×ボタン" とかで検索しても同じようなトラブルは見当たらないので、私の環境が特殊なのかもしれないけれど(とは言え、自室と研究室の両方の端末で起きたので、再現性はあるはず)、同じトラブルで困っている方はぜひお試しください。

テーマ:ソフトウェア - ジャンル:コンピュータ

次のページ

FC2Ad

FC2ブログ