2013/11/06

[ Linux / 備忘録 ] CentOS 6.4 で glibc をスタティックリンクする方法

CentOS 6.4 で glibc をスタティックリンクしようとすると ld がエラーを出力します。

$ g++ -static test.cpp 
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status

CentOS 6.4 ではスタティックライブラリが別の RPM パッケージになったようです。
`glibc-static` というパッケージをインストールするとできるようになります。

# yum install glibc-static

test.cpp をコンパイルしてみます。

$ g++ -static test.cpp
$ ls
a.out  test.cpp
$ ldd a.out 
        not a dynamic executable

glibc をスタティックリンクすることができました。

なお、32 ビットバイナリをビルドする場合は `glibc-static.i686` をインストールする必要があります。

| | コメント (0) | トラックバック (0)

2013/06/23

[ Debian ] DVCS veracity deb packages for Debian

DVCS veracity deb packages for Debian.

These packages passed `make test`, But no warranty.
Please use at your own risk.

| | コメント (0) | トラックバック (0)

2013/05/29

[ Debian ] libmozjs185 for squeeze

At official repository, Spidermonkey javascript engine `libmozjs185` for squeeze does not exist.
Then I built for i386 and amd64.

For Debian squeeze i386
libmozjs185-1.0_1.8.5-1.0.0+dfsg-4_i386.deb
libmozjs185-dev_1.8.5-1.0.0+dfsg-4_i386.deb
For Debian squeeze amd64
libmozjs185-1.0_1.8.5-1.0.0+dfsg-4_amd64.deb
libmozjs185-dev_1.8.5-1.0.0+dfsg-4_amd64.deb

NOTE!
These binary passed `make check`, but NO WARRANTY.

| | コメント (0) | トラックバック (0)

[ Debian ] cmake-2.8.9 for Debian squeeze i386

At official squeeze-backports, cmake-2.8.9 for i386 does not exist.

Then I built it.

NOTE!
These binary passed `make test`, but NO WARRANTY.

| | コメント (0) | トラックバック (0)

2012/05/02

[ programming ] 1から100までの整数の和を表示する、ただし変数は新たに宣言しないプログラム

Twitter でこんなツイートが流れてきました。

鼻で笑えるかって?もちろん!

この問題は次のように言い換えることができます。

初項 1, 公差 1 の等差数列について、初項から第100項までの和を求めよ。

これなら簡単ですね。Python なら

print (100 * (1 + 100)) / 2

「初項 a, 公差 d の等差数列について第 m 項から第 n 項までの和」に一般化する場合は、変数なしのコードは思いつきませんが(´・ω・`)・・・

| | コメント (0) | トラックバック (0)

2012/01/06

[ python ] IPython ver0.12 でシェル起動時にモジュールをロードする方法

Abstract
  1. IPython は環境変数 PYTHONSTARTUP をみない
  2. IPython のバージョンアップで ipythonrc は廃止
  3. IPython 起動時にモジュールを import する方法

IPython は環境変数 PYTHONSTARTUP をみない

Python の使い勝手向上に大きく貢献してくれる IPython ですが、欠点の一つとして 環境変数 PYTHONSTARTUP を無視することが挙げられます。

これまでは、よく使う os や sys などのモジュールを起動時にインポートするには ipythonrc という設定ファイルの execfile セクションに PYTHONSTARTUP と同じファイルを指定していました。が・・・

IPython のバージョンアップで ipythonrc は廃止されました

IPython ver 0.11 以降は仕様が変更されてしまいました。
設定ファイル ipythonrc を書いて IPython を起動すると下記のように警告が表示されます。

$ ipython
WARNING: Found old IPython config file u'/home/fomalhaut/.ipython/ipythonrc' (modified by user)

  The IPython configuration system has changed as of 0.11, and these files will
  be ignored. See http://ipython.github.com/ipython-doc/dev/config for details
  of the new config system.
  To start configuring IPython, do `ipython profile create`, and edit
  `ipython_config.py` in /profile_default.
  If you need to leave the old config files in place for an older version of
  IPython and want to suppress this warning message, set
  `c.InteractiveShellApp.ignore_old_config=True` in the new config.

簡約すると「バージョン 0.11 で設定方式が変更された。これからは ipython_config.py で各種設定をしろ」ということです。

IPython 起動時にモジュールを import する方法

ipython_config.py の c.InteractiveShellApp.exec_files に PYTHONSTARTUP と同じファイルを指定します。

ipython_config.py は Linux の場合は $HOME/.ipython/profile_default ディレクトリ、 Windows の場合は %userprofile%\_ipython/profile_default フォルダの中にあります。

たとえば python_startup.py を実行したい場合は下記 1 行を追記 ( すでに c.InteractiveShellApp.exec_files が存在する場合は修正 ) します。

設定例

c.InteractiveShellApp.exec_files = [ "python_startup.py" ]

ファイルを保存したら IPython を起動して確認しましょう。

うまくいっているようです。

| | コメント (0) | トラックバック (0)

2011/06/02

[ ubuntu ] パッケージインストールした clang でインクルードエラー

Ubuntu 11.04 でパッケージインストール ( aptitude install ) した clang で C++ ソースをコンパイルしようとすると、インクルードエラーになります。

サンプルソース

#include <iostream>

int main( void )
{
        std::cout << "Hello, World." << std::endl;
        return 0;
}

clang でコンパイル。

$ clang test.cpp 
test.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

この原因は、aptitude でインストールされる clang が GCC4.5 環境で使われることを前提にしていないことにあります。

$ clang -v -x c++ /dev/null -fsyntax-only
clang version 2.8 (branches/release_28)
Target: i386-pc-linux-gnu
Thread model: posix
 "/usr/bin/clang" -cc1 -triple i386-pc-linux-gnu -fsyntax-only -disable-free -disable-llvm-verifier -main-file-name null -mrelocation-model static -mdisable-fp-elim -mconstructor-aliases -target-cpu pentium4 -target-linker-version 2.21.0.20110216 -v -resource-dir /usr/lib/clang/2.8 -ferror-limit 19 -fmessage-length 80 -fexceptions -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -x c++ /dev/null
clang -cc1 version 2.8 based upon llvm 2.8rc hosted on i386-pc-linux-gnu
ignoring nonexistent directory "/usr/include/c++/4.4"
ignoring nonexistent directory "/usr/include/c++/4.4/x86_64-linux-gnu/32"
ignoring nonexistent directory "/usr/include/c++/4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.4"
ignoring nonexistent directory "/usr/include/c++/4.4/i486-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.3"
ignoring nonexistent directory "/usr/include/c++/4.3/x86_64-linux-gnu/32"
ignoring nonexistent directory "/usr/include/c++/4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.3"
ignoring nonexistent directory "/usr/include/c++/4.3/i486-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.3"
ignoring nonexistent directory "/usr/include/c++/4.3/arm-linux-gnueabi/"
ignoring nonexistent directory "/usr/include/c++/4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.2"
ignoring nonexistent directory "/usr/include/c++/4.2/x86_64-linux-gnu/32"
ignoring nonexistent directory "/usr/include/c++/4.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.2"
ignoring nonexistent directory "/usr/include/c++/4.2/i486-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.1"
ignoring nonexistent directory "/usr/include/c++/4.1/x86_64-linux-gnu/32"
ignoring nonexistent directory "/usr/include/c++/4.1/backward"
ignoring nonexistent directory "/usr/include/c++/4.1"
ignoring nonexistent directory "/usr/include/c++/4.1/i486-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.1/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.4"
ignoring nonexistent directory "/usr/include/c++/4.4.4/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.4"
ignoring nonexistent directory "/usr/include/c++/4.4.4/i686-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.3"
ignoring nonexistent directory "/usr/include/c++/4.4.3/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.3"
ignoring nonexistent directory "/usr/include/c++/4.4.3/i686-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.2"
ignoring nonexistent directory "/usr/include/c++/4.4.2/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.4.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.2"
ignoring nonexistent directory "/usr/include/c++/4.4.2/i686-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.1"
ignoring nonexistent directory "/usr/include/c++/4.4.1/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.4.1/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.1"
ignoring nonexistent directory "/usr/include/c++/4.4.1/i586-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4.1/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.2"
ignoring nonexistent directory "/usr/include/c++/4.3.2/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.3.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.2"
ignoring nonexistent directory "/usr/include/c++/4.3.2/i386-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.3.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.0"
ignoring nonexistent directory "/usr/include/c++/4.3.0/x86_64-redhat-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.3.0/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.0"
ignoring nonexistent directory "/usr/include/c++/4.3.0/i386-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.3.0/backward"
ignoring nonexistent directory "/usr/include/c++/4.1.2"
ignoring nonexistent directory "/usr/include/c++/4.1.2/x86_64-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.1.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.1.2"
ignoring nonexistent directory "/usr/include/c++/4.1.2/i386-redhat-linux/"
ignoring nonexistent directory "/usr/include/c++/4.1.2/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.3"
ignoring nonexistent directory "/usr/include/c++/4.4.3/x86_64-pc-linux-gnu/32"
ignoring nonexistent directory "/usr/include/c++/4.4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.4.3"
ignoring nonexistent directory "/usr/include/c++/4.4.3/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.3"
ignoring nonexistent directory "/usr/include/c++/4.3/i586-suse-linux/"
ignoring nonexistent directory "/usr/include/c++/4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.3"
ignoring nonexistent directory "/usr/include/c++/4.3/x86_64-suse-linux/32"
ignoring nonexistent directory "/usr/include/c++/4.3/backward"
ignoring nonexistent directory "/usr/include/c++/4.4"
ignoring nonexistent directory "/usr/include/c++/4.4/i586-suse-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.4"
ignoring nonexistent directory "/usr/include/c++/4.4/x86_64-suse-linux/"
ignoring nonexistent directory "/usr/include/c++/4.4/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.1"
ignoring nonexistent directory "/usr/include/c++/4.3.1/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.3.1/backward"
ignoring nonexistent directory "/usr/include/c++/4.3.1"
ignoring nonexistent directory "/usr/include/c++/4.3.1/x86_64-unknown-linux-gnu/"
ignoring nonexistent directory "/usr/include/c++/4.3.1/backward"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4/i686-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/include/g++-v4/x86_64-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.3.2/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4/x86_64-pc-linux-gnu/32"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4/backward"
ignoring nonexistent directory "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1"
ignoring nonexistent directory "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1/x86_64-pc-linux-gnu/"
ignoring nonexistent directory "/usr/lib/llvm-gcc-4.2-9999/include/c++/4.2.1/backward"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/clang/2.8/include
 /usr/include
End of search list.

GCC4.4 を入れるか自前でビルドしなおしたほうがいいでしょう ( clang のヘッダサーチパスはハードコーディングされています。また、-I オプションでパスを指定する方法もありますがお勧めできません )。

| | コメント (0) | トラックバック (1)

2010/08/20

[ win64 ] openssl 1.0.0 バイナリ

OpenSSL 1.0.0 の x64 用 DLL がなかったのでビルドしました。
OpenSSL 本体と、スタティックライブラリも入れてあります。

例によって暗号関連の法律がらみがあるので、OpenSSL の EULA に加えて、以下の条件に同意いただける方のみご使用ください。なお、アップロードできるファイルサイズ上限が 1MB という時代錯誤も甚だしいココログの制限のため、7zip 形式で圧縮してあります。7zip の解凍ソフトはこちらからダウンロードしてください。

  1. 自己責任
  2. 学習・開発に限って利用すること

OpenSSL 1.0.0 for win64

おまけ
Win32 用 も作成しました。

OpenSSL 1.0.0 for Win32

| | コメント (0) | トラックバック (0)

2010/08/18

[ win ] 実行ファイルが 32 ビットか 64 ビットかを確認する方法

実行ファイルが 32bits ( Win32, x86 ) か 64bits ( Win64, x64 ) かを判断する方法は、主に2つあります。

1. dumpbin コマンドを使用する


Visual Studio がインストールされている環境では、dumpbin コマンドを使用して簡単に確認することができます。 スタートメニューの "Visual Studio Tools" から "Visual Studio コマンドプロンプト" を起動しましょう。dumpbin コマンドに /headers オプションをつけて実行します。

いろいろと表示されますが、32bits バイナリか 64bits バイナリかの判断に必要なのは "machine" の情報です。パイプで findstr か more に渡して必要な情報だけ表示させるとわかりやすいでしょう。

1.1. 32bits バイナリの場合
下記のように表示されます。

dumpbin /headers easy_install.exe | findstr machine
             14C machine (x86)
                   32 bit word machine

1.2. 64bits バイナリの場合
下記のように表示されます。

dumpbin /headers python.exe | findstr machine
            8664 machine (x64)

2. Visual Studio なしで見分ける方法

バイナリエディタで PE ヘッダを解読します。dumpbin を実行すると 32bits バイナリでは "14C machine (x86)"、64bits バイナリでは "8664 machine (x64)" と表示されたのを覚えているでしょうか? 実は、machine の左側の数値が PE ヘッダに記録されており、dumpbin はこれをもとに x86 であるか x64 であるかを判別しています。

ただし、IA32 系 CPU はリトルエンディアンですので、バイナリエディタ上での表記は "4C 01" または "64 86" になることに注意してください。

2.1. 32bits バイナリの場合
下図のようになります。赤線で囲んだ部分より 32bits バイナリであると判断できます。

2.2. 64bits バイナリの場合 下図のようになります。赤線で囲んだ部分により 64bits バイナリであると判断できます。

| | コメント (0) | トラックバック (0)

2010/07/22

[ CUDA / GPGPU ] CUDA Toolkit 3.1 released

via TechConnect magazine

CUDA Toolkit 3.1 がリリースされました。ダウンロードは こちらから。

変更点のひとつに "Support for 16-way concurrency allows up to 16 different kernels to run at the same time on Fermi architecture GPUs" ( Fermi シリーズの GPU で、16個のカーネルコードを同時実行できるようにした ) とあります。これは、おそらく、SM ( Streaming Multiprocessor ) ごとに異なるカーネルコードを実行できるようにしたのだと推測できますが、現状では SM 16 機を備えた「フルスペック」の Fermi はリリースされていないような気がするのですが・・・

2010-07-25 追記
Excel で Asynchronous User-defined Functions を使用するために必要な SDK、Excel 2010 XLL SDK

| | コメント (0) | トラックバック (0)

より以前の記事一覧