configureでヘッダやライブラリのパスを指定する方法

January 20,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

configureでヘッダやライブラリのパスを指定する方法を紹介します。

1.問題点

とあるCライブラリをインストールしようと思い、configureを実行したところ、下記のようなエラーが発生しました。

% ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
 :
checking whether byte ordering is bigendian... no
checking size of void *... 8
checking for elf_begin in -lelf... yes
checking for dwarf_def_macro in -ldwarf... no
configure: error: libdwarf is not found

libdwarfというライブラリがみつからないようです。

ということで、configureを実行するときにライブラリやヘッダのパスを指定する方法を紹介します。

2.configureを実行するときにライブラリやヘッダのパスを指定する

configureを実行するときにライブラリやヘッダのパスを指定するには次のようにします。

./configure LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include"

LDFLAGSの右辺にライブラリのパス、CFLAGSの右辺にヘッダのパスを記述します。

指定可能なオプションは"./configure --help"で表示されます。

参考にhelpの内容を掲載しておきます。

% ./configure --help
`configure' configures tracef 0.16 to adapt to many kinds of systems.
 
Usage: ./configure [OPTION]... [VAR=VALUE]...
 
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.
 
Defaults for the options are specified in brackets.
 
Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']
 
Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]
 
By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
 
For better control, use the options below.
 
Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/tracef]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]
 
Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
 
Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
 
Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  CXXCPP      C++ preprocessor
 
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
 
Report bugs to the package provider.

3.参考サイト

参考サイトは下記です。ありがとうございました。

What is the correct syntax to add CFLAGS and LDFLAGS to "configure"?

Comments [0] | Trackbacks [0]

C/C++プログラム実行時の関数をトレースする方法

January 18,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C/C++プログラム実行時の関数をトレースする方法を紹介します。

1.はじめに

C/C++プログラムで実行時の関数をトレースする場合、printf()などを埋め込んでログに出力することが少なくないと思います。

が、その方法ではログ出力するためにプログラムに手を入れなくてはならなず、非効率です。

また規模の大きなプログラムでは現実的な解決方法ではありません。

printf()を埋め込まずにトレースできないか、方法を探していたところ、標準でそのような機能があることをみつけました。

仕組みは、gccでトレースしたいプログラムファイルのコンパイル時に、コンパイルオプション"-finstrument-functions"を付与することで、関数の実行開始時および復帰時に下記のフック関数を呼び出せるようになります。

void __cyg_profile_func_enter(void* func, void* caller);
void __cyg_profile_func_exit(void* func, void* caller);

あとはこの2つの関数にログ出力を実装し、ライブラリとして引き込めばOKです。

ということで、C/C++プログラムを動かして関数をトレースする方法を紹介します。

2.ソースコード

まず、トレース用の関数(trace.cpp)です。

前述の__cyg_profile_func_enter()、__cyg_profile_func_exit()を実装し、トレース情報を出力します。

trace.cpp

#include <dlfcn.h>
#include <iostream>
 
extern "C" {
    void __cyg_profile_func_enter(void* func, void* caller);
    void __cyg_profile_func_exit(void* func, void* caller);
}
 
const char* to_name(void* address) {
    Dl_info dli;
    if (0 != dladdr(address, &dli)) {
        return dli.dli_sname;
    }
    return 0;
}
 
void __cyg_profile_func_enter(void* func, void* caller) {
    const char* name = to_name(func);
    if (name) {
        std::cout << "start:" << name << std::endl;
    } else {
        std::cout << "start:" << func << std::endl;
    }
}
 
void __cyg_profile_func_exit(void* func, void* caller) {
    const char* name = to_name(func);
    if (name) {
        std::cout << "end  :" << name << std::endl;
    } else {
        std::cout << "end  :" << func << std::endl;
    }
}

そしてトレース対象となるC++サンプル関数(sample.cpp/sample.c)です。

サンプルでは、main()→hello_world1()→hello_world2()の順に起動するようにします。

ファイルの内容は同じですが、C用とC++用に異なるファイル名で2つ作成します。

sample.cpp/sample.c

#include <stdio.h>
 
void hello_world2(void) {
    printf( "Hello World2!\n" );                                                                                                                              }
 
void hello_world1(void) {
    printf( "Hello World1!\n" );
    hello_world2();
}
 
int main(void) {
    hello_world1();
    return 0;
}

3.コンパイル

トレース用関数(trace.cpp)

% g++ -fPIC -shared trace.cpp -o libctrace.so -ldl

トレース対象のC++サンプル関数(sample.cpp)

% g++ -fPIC -finstrument-functions sample.cpp -o helloworld_cpp

トレース対象のC++サンプル関数(sample.c)

% gcc -fPIC -finstrument-functions sample.c -o helloworld_c

これで下記のとおり、サンプルのhelloworld_c、helloworld_cppと、トレース用ライブラリlibctrace.soが作られます。

% ls -l
-rwxr-xr-x. 1 hoge hoge 7327  1月 17 23:21 2017 helloworld_c
-rwxr-xr-x. 1 hoge hoge 8256  1月 17 23:30 2017 helloworld_cpp
-rwxr-xr-x. 1 hoge hoge 8498  1月 17 23:23 2017 libctrace.so
-rw-r--r--. 1 hoge hoge  342  1月 17 23:20 2017 sample.c
-rw-r--r--. 1 hoge hoge  342  1月 17 23:12 2017 sample.cpp
-rw-r--r--. 1 hoge hoge  784  1月 17 23:23 2017 trace.cpp

4.実行

実行時は環境変数"LD_PRELOAD"を設定します。

LD_PRELOADにlibctrace.soを指定することでこのライブラリが最優先で読み込まれ、__cyg_profile_func_enter()および__cyg_profile_func_exit()が実行されます。

helloworld_cpp(C++)の実行

%  LD_PRELOAD=./libctrace.so ./helloworld_cpp | c++filt                                                                            
start:main
start:hello_world1()
Hello World1!
start:hello_world2()
Hello World2!
end  :hello_world2()
end  :hello_world1()
end  :main

c++filtはC++やJavaのシンボルをデマングルするコマンドです。

helloworld_cpp(C++)でc++filtを使わずに実行

% LD_PRELOAD=./libctrace.so ./helloworld_cpp                                                                                        
start:main
start:_Z12hello_world1v
Hello World1!
start:_Z12hello_world2v
Hello World2!
end  :_Z12hello_world2v
end  :_Z12hello_world1v
end  :main

helloworld_c(C)の実行

% LD_PRELOAD=./libctrace.so ./helloworld_c                                                                                          
start:main
start:hello_world1
Hello World1!
start:hello_world2
Hello World2!
end  :hello_world2
end  :hello_world1
end  :main

なお、実行環境によってトレース関数内で使っているdladdr()が正常に動作しない(=アドレスから関数名が取得できない)ケースがありました。

また、トレース用ライブラリのコンパイルで"-ldl"を指定しないと、実行時に下記のエラーが発生することを確認しています。

./helloworld_cpp: symbol lookup error: ./libctrace.so: undefined symbol: dladdr

5.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

Movable Typeで承認ワークフロー

January 11,2017 12:03 AM
Category:[MTDDC]
Tag:[MTDDC]
Permalink

遅くなりましたが「MTDDC Meetup Tokyo 2016」で発表した「Movable Typeで承認ワークフロー」のスライドを公開します。

スライドはワークフローおよびWorkflowプラグインについての解説で、次のような構成になっています。

  • ワークフローの概要
  • ワークフロープラグイン開発のきっかけ
  • 苦労した点
  • Workflowプラグインの概要
  • 必要な設定
  • その他の機能
  • 実演(スライドなしです、すいません)

また下記のリンクから当日の音声も聴くことができます。

Movable Typeで承認ワークフロー

Comments [0] | Trackbacks [0]

Finaleで3連符に付点をつける方法

January 7,2017 12:55 AM
Category:[Finale]
Tag:[Finale]
Permalink

Finaleで3連符に付点をつける方法を紹介します。

Finaleで3連符に付点をつける

1.問題点

Finaleで3連符に付点をつけたいと思い、3連符を入力するときに「付点」アイコンをクリックして入力してみましたが、入力できませんした。

ということで、Finaleで3連符に付点をつける方法を紹介します。

2.3連符に付点をつける

3連符に付点をつけるには、付点をつけるのは後回しにして、とりあえず4分音符で入力。

4分音符を入力

8分音符に切り替えて、8分音符も入力します(4分より先に入力してもOK)。

8分音符も入力

「高速ステップ入力ツール」のアイコンをクリック。

高速ステップ入力ツール

表示が切り替わった瞬間に音価の足りない部分が休符(ここでは16分休符)で埋まりますが、無視して作業を続行します。

休符

付点をつけたい音符に挿入バーを移動して「.」キーを押下(Finaleの付点アイコンではなくキーボードのキー)。

「.」キーを押下

「規定の拍数を超えています」というダイアログが表示されるので、「余分な拍を削除する」を選択して「OK」をクリック。

余分な拍を削除する

これで16分休符が削除されます。

16分休符が削除

「選択ツール」アイコンなどをクリックして表示を切り替えれば完成です。

表示を切り替えれば完成

Comments [0] | Trackbacks [0]

複数のWordファイルを結合する方法

December 29,2016 1:55 AM
Category:[Word]
Tag:[Office, Word]
Permalink

複数のWordファイルを結合する方法を紹介します。

1.はじめに

WordファイルにはExcelのような共有機能がないため、1つのファイルを複数人で同時に編集することができません。

そうすると予めファイルを分割しておき、各人がそれぞれのファイルを編集することが効率的なのですが、分割したファイルを結合(マージ)する方法が分かりません。

ということで、複数のWordファイルを結合する方法を紹介します。

2.複数のWordファイルを結合する

複数のWordファイルを結合するために、「アウトライン表示によるサブ文書の挿入」機能を利用します。

ここでは下記の3つの簡素な内容のWordファイルを例に結合してみます。

test1.docx
Wordファイル1

test2.docx
Wordファイル2

test3.docx
Wordファイル3

test1.docxにtest2.docx、test3.docxを結合します。test2.docx、test3.docxが「サブ文書」となります。

test1.docxの「表示」タブ→「アウトライン」をクリック。

(クリックで拡大、以下同様)
アウトライン

これでアウトライン表示になったので、「文書の表示」をクリック。

文書の表

これでメニューが表示されたので、カーソルをアウトライン表示の一番下に移動して「挿入」をクリックし、test2.docを選択。

挿入

test2.docの内容が挿入されました。同じ手順でtest3.docの内容も挿入します。

挿入

test3.docの内容が挿入されました。

挿入

「アウトライン表示を閉じる」をクリック。

アウトライン表示を閉じる

これで通常の表示に戻り、test1.docxにtest2.docx、test3.docxの文書が結合されたことがわかります。

1ページ目
Wordファイル1(1ページ目)

2ページ目
Wordファイル1(2ページ目)

3ページ目
Wordファイル1(3ページ目)

この状態でtest1.docxを保存して終了し、再度開くと、test2.docx、test3.docxの部分がリンクになっていることがわかります。

リンク

つまり、test2.docx、test3.docxを個別に編集すれば、編集内容が更新されることになります。

更新を反映させる方法は次項の手順を実施してください。

3.リンクを本文に置き換える(=更新を反映させる)

test1.docxのリンクを本文に置き換える(=更新を反映させる)には、「表示」タブ→「アウトライン」→「サブ文書の展開」をクリック。

サブ文書の展開

これでtest2.docx、test3.docxの内容がtest1.docxに反映されます。

test2.docx、test3.docxの内容がtest1.docxに反映

この状態では、test1.docxを開くたびにtest2.docx、test3.docxの部分がリンクとして表示されることになります。

test2.docx、test3.docxの部分をリンクではなく本文に置き換えてしまいたい場合は、次項の手順を実施してください。

4.リンクを解除する

test1.docxの中にあるtest2.docx、test3.docxのリンクを本文に完全に置き換えるには、前項の手順でtest2.docxの任意の位置にカーソルを置き、「リンク解除」をクリック。

リンク解除

同じ要領でtest3.docxの任意の位置にカーソルを置き、「リンク解除」をクリック。

リンク解除

これでtest2.docx、test3.docxのリンクが解除され、test1.docxに反映されます。

test2.docx、test3.docxのリンクが解除

ただしこの操作を行ったあと、test2.docx、test3.docxを変更しても、test1.docxに反映されなくなります。

5.注意事項

文書を結合した時、各ファイルの本文末尾に「セクション区切り」が挿入され、ページ番号が連番にならない事象を確認しています。

ページ番号を連番にするには、セクション区切りを削除する必要があります。

セクション区切りを削除するには「Wordでセクション区切りを削除する方法」を参照してください。

また、サブ文書のファイルサイズが大きい場合、サブ文書の展開に時間がかかる(数分とか)ことも確認しています。

Comments [0] | Trackbacks [0]

Wordのルーラーが揃わない場合の対処

December 28,2016 12:55 AM
Category:[Word]
Tag:[Office, Word]
Permalink

Wordのルーラーが揃わない場合の対処方法を紹介します。

1.問題点

Wordには段落の1行目と2行目以降の開始位置を指定するためのルーラーが用意されています。

ルーラー

▽が段落の1行目の開始位置、△が2行目以降の開始位置、その下の□で全体の開始位置を指定します。

が、行によっては▽と△が一致せず、開始位置が不揃いになる場合があります。

開始位置が不揃い

ということで、ルーラーが揃わない場合の対処方法を紹介します。

2.ルーラーが揃わない場合の対処方法

ルーラーはマウスでドラッグすると一定間隔でしか移動できないのですが、Altキーを押下しながらドラッグすることで微調整ができるようになります。

ルーラーの表示も切り替わります。

開始位置が揃う

コツは下記の手順で実施することです。

  1. Altキーを押しながらルーラーをドラッグ
  2. 位置が揃った時点でマウスのクリックを離す
  3. Altキーを離す

2と3の手順を逆にすると(=先にAltキーを離すと)ルーラーの位置がずれてしまうのでご注意ください。

Comments [0] | Trackbacks [0]

Wordでセクション区切りを削除する方法

December 27,2016 12:33 AM
Category:[Word]
Tag:[Office, Word]
Permalink

Wordでセクション区切りを削除する方法を紹介します。

1.問題点

Wordには「セクション区切り」という機能があり、この機能を利用することでセクション単位にレイアウトや書式の設定が可能になります。

簡単なサンプルで、現在のカーソルがある位置(「あああ」と「いいい」の間)にセクション区切りを挿入する方法を説明します。

「あああ」と「いいい」の間にカーソルを移動し、「ページレイアウト」タブ→「区切り」をクリックして、セクション区切りの「現在の位置から開始」をクリック。

これでセクション区切りが挿入されました。

ただ、ご覧のとおりセクション区切りが挿入されていることが分かりにくく、挿入したセクション区切りを削除する方法が分かりません。

ということで、セクション区切りを削除する方法を紹介します。

2.セクション区切りを削除する

セクション区切りを削除するには、まずセクション区切りを表示させます。

セクション区切りを表示するには、「ホーム」タブ→「段落」グループの右側にある「編集記号の表示/非表示」アイコンをクリック。

これでセクション区切りが可視化されます。

(クリックで拡大)

あとは表示されたセクション区切りを選択して削除すればOKです。

(クリックで拡大)

これでセクション区切りが削除されました。

(クリックで拡大)

3.ステータスバーにセクション区切りを標示する

前項では「編集記号の表示/非表示」でセクション区切りの編集記号を表示させましたが、ステータスバーにセクション番号を表示させることで文書内のセクション区切りの有無を調べることができます。

ステータスバーにセクション区切りを標示するには、ステータスバーを右クリックして「セクション」にチェックをつけます。

これでセクション番号が表示されます。

セクション区切りがある場合、カーソルを移動するかページをスクロールすれば、セクション番号の表示が変わります。

Comments [0] | Trackbacks [0]

MTのアイテムアップロード時に記事と関連付ける「EntryAssociaterWithUploadAssetプラグイン」

December 26,2016 12:55 AM
Category:[アイテム]
Tag:[EntryAssociaterWithUploadAsset, MovableType, Plugin]
Permalink

MTのアイテムアップロード時に記事と関連付ける「EntryAssociaterWithUploadAssetプラグイン」を公開します。

1.機能

タイトルのとおり、MTに本プラグインを適用することで、アイテムの新規アップロード時に記事と関連付けてくれます。

2.プラグインのダウンロード・インストール

下記のリンクをクリックして、EntryAssociaterWithUploadAssetのプラグインアーカイブをダウンロードします。

EntryAssociaterWithUploadAsset_0_01.zip

プラグインアーカイブを展開し、pluginsフォルダにあるEntryAssociaterWithUploadAssetフォルダをMovable Typeのアプリケーションディレクトリのpluginsディレクトリにアップロードします。

システム管理画面のプラグイン設定画面で「EntryAssociaterWithUploadAsset~」が表示されればインストール完了です。

プラグイン設定画面

3.使い方

アイテムのアップロード画面に「関連付ける記事」という項目が表示されます。

アイテムのアップロード画面

アップロードするアイテムを記事と関連付けたい場合にこのプルダウンから記事を選択してください。

アイテムのアップロード画面

4.注意事項

記事が大量に登録されている場合、アイテムアップロード画面表示に時間がかかるのでご注意ください。

Comments [0] | Trackbacks [0]

ApacheのCGIでソースが表示される場合の対処

December 15,2016 12:03 AM
Category:[Apache]
Tag:[Apache]
Permalink

ApacheのCGIでソースが表示される場合の対処を紹介します。

1.問題点

Linux(CentOS)にtar.gzからインストールしたApacheでCGIを動かそうとしたのですが、CGIのソースがそのままブラウザに表示されてしまいます。

httpd.confは下記のように設定済みです。

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

2.原因

原因は、CGI用のモジュールがロードされていなかったためです。

CGI用のモジュールがロードされているかどうかは下記のコマンドで確認できます。

[root@file bin]# ./apachectl -M|grep cgi
 cgid_module (shared)

「apachectl -M」は、ロードされたモジュールの一覧を表示するコマンドです。

何も表示されない場合、CGI用のモジュールがロードされていないので、次項の手順でロードします。

3.対処

CGI用のモジュールをロードするには、httpd.confの、

#LoadModule cgid_module modules/mod_cgid.so

LoadModule cgid_module modules/mod_cgid.so

に変更して、Apacheを再起動します。

# /usr/local/apache2/bin/apachectl restart

これでCGIが起動するようになりました。

4.その他

過去の情報では、

LoadModule cgi_module modules/mod_cgi.so

を設定するようになっていますが、Apacheの2.4系からworker(event) + mod_cgidのモデルが推奨されているようです。

ちなみに、インストールディレクトリでモジュールが配置されている/usr/local/apache2/modulesにもmod_cgid.soしかなく、mod_cgi.soはありませんでした。

5.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

Linuxにtreeをインストールする方法

December 8,2016 12:33 AM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxにtreeをインストールする方法を紹介します。

1.はじめに

treeはディレクトリ配下のファイルやディレクトリをツリー状に表示してくれるコマンドです。

が、先日インスト―ルしたCentOSにはtreeが入っていません。

ということで、Linuxにtreeをインストールする方法を紹介します。

2.treeをインストールする

yumが使える環境であれば、

# yum install tree

でインストールできます。

yumが使えない場合、インストールパッケージは下記にあります。

http://rpm.pbone.net/index.php3?stat=3&search=tree&srodzaj=3

にあります。

正常にダウンロードできない場合は、リンクの「ftp://」を「http://」に書き換えて実行してみてください。

ダウンロードしたパッケージを任意のディレクトリにアップロードして、rpmコマンドを実行すればインストールできます。

# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:tree-1.6.0-10.el7                ################################# [100%]

3.罫線が文字化けする場合の対処

インストール後、実行してみましたが、下記のように罫線が文字化けする事象に遭遇。

# tree
tqq hoge
x?? mqq test
x??     tqq aaa.h
x??     tqq aaa.cc

対処方法として、treeコマンドに「--charset=C」を付与します。

# tree --charset=C
|-- hoge
|   `-- test
|       |-- aaa.h
|       |-- aaa.cc
Comments [0] | Trackbacks [0]

MTテンプレートタグのブラケットを書き換える「MTTagBracketChangerプラグイン」

December 4,2016 12:55 AM
Category:[テンプレートタグ]
Tag:[MovableType, MTTagBracketChanger, Plugin]
Permalink

MTテンプレートタグのブラケットを書き換える「MTTagBracketChangerプラグイン」を公開します。

これは Movable Type Advent Calendar 2016 4日目の記事です。

1.はじめに

Movable Typeのテンプレートタグは、

<mt:Entries>
  <mt:EntryTitle>
</mt:Entries>

という風に、各タグの前後は"<"と">"、いわゆるブラケット(厳密にはアングルブラケット)で括るようになっています。

このブラケットを「別の文字に書き換えられないだろうか?」というくだらないことを、MTを始めた頃に考えたりしたのですが、当時はPerlもろくに読めずに挫折しました。

それから年月も経ってふとそのことを思い出し、今回作ってみました。

何の役にも立ちませんが、

[mt:Entries]
  [mt:EntryTitle]
[/mt:Entries]

などのフォーマットで動作するので、5分くらいは楽しめると思います。

下記のようなフォーマットもできそうですが面倒なのでやめました。

<?php mt:Entries?>
  <?php mt:EntryTitle?>
<?php /mt:Entries?>

2.プラグインのダウンロード・インストール

下記のリンクをクリックして、MTTagBracketChangerのプラグインアーカイブをダウンロードします。

MTTagBracketChanger_0_01.zip

プラグインアーカイブを展開し、pluginsフォルダにあるMTTagBracketChangerフォルダをMovable Typeのアプリケーションディレクトリのpluginsディレクトリにアップロードします。

システム管理画面のプラグイン設定画面で「MTTagBracketChanger~」が表示されればインストール完了です。

プラグイン設定画面

3.使い方

システム管理画面のプラグイン設定画面で「MTTagBracketChanger~」→「設定」をクリックし、「開始文字」と「終了文字」を設定します。デフォルト状態は何も設定されていません。

設定後、テンプレートタグのブラケットを書き換えてみてください。正規表現で使われる文字を設定する場合は必ずエスケープしてください。

プラグイン設定画面

4.注意事項

全ての動作を確認していないので不具合がありましたらご了承ください。

また、プラグインはテンプレートタグ処理のメイン部分に手をいれているため、設定した文字によっては管理画面(=テンプレートタグを使っている)が正常に表示されなくなる可能性があります。

管理画面が正常に表示されなくなった場合、プラグインを削除すれば元に戻ります。

Comments [0] | Trackbacks [0]

C/C++で「incompatible implicit declaration of built-in function」という警告の対処

November 29,2016 1:11 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C/C++で「incompatible implicit declaration of built-in function」という警告の対処について紹介します。

1.問題点

次のプログラム(sample.c)を書きました。

int main(void) {
    int c = 100;
    printf("%d\n", c);
    return 0;
}

このプログラムをコンパイルしたところ、次の警告が表示されました。

[foo@hoge ~]$ gcc -o sample.c                                                                    
sample.c: In function 'main':
sample.c:3: 警告: incompatible implicit declaration of built-in function 'printf'

警告は「ビルトイン関数strcpyの互換性のない暗黙の宣言」という意味になります。

ネットで調べたとところ、「事前に宣言されていない関数を使用すると、(コンパイラで)関数の暗黙の宣言が行われる。ただし暗黙の宣言が組み込みの関数と互換性がない場合、警告が表示される」ということらしいです。

2.原因

原因は、printf()を使っていてstdio.hをインクルードしていないためです。

その他、strcpy()を使っていてstring.hをインクルードしていない場合など、同様の警告が発生します。

3.対処

下記の1行を追加すれば解消します。

#include <stdio.h>

4.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

nkfで上書きする方法

November 28,2016 1:11 AM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxのnkfコマンドで上書きする方法を紹介します。

1.問題点

nkfはファイルの文字コードを変換するコマンドです。

たとえば、UTF-8環境のLinuxで文字コードがEUCのファイルを参照するには次のようにします。

$ nkf -w foo.txt

-wはUTF-8(BOMなし)に変換するオプションです。

が、この方法ではファイルを参照するたびに毎回nkfを実行する必要があります。

できれば同じファイル名で文字コードを変更してしまいたいのですが、方法が分かりません。

2.nkfコマンドで上書きする

nkfコマンドで上書きするには、

$ nkf -w --overwrite foo.txt

という風に「--overwrite」を付与します。

--overwriteは既存のファイルを上書きするオプションです。

Comments [0] | Trackbacks [0]

Apache 2.4 系をソースからインストール

November 22,2016 12:55 AM
Category:[Apache]
Tag:[Apache]
Permalink

LinuxにApache 2.4 系をソースからインストールする手順を紹介します。

1.アーカイブのダウンロードと展開

Apacheのダウンロードのページにアクセスして、「httpd-2.4.23.tar.gz」をクリック。

httpd-2.4.23.tar.gz

ダウンロードしたアーカイブを任意のディレクトリで展開します。

<pre><code>[root@file tmp]# tar zxvf httpd-2.4.23.tar.gz
httpd-2.4.23/
httpd-2.4.23/.deps
httpd-2.4.23/.gdbinit
httpd-2.4.23/ABOUT_APACHE
 :
httpd-2.4.23/build/aix/README</code></pre>

2.configure実行(1回目)

configureを実行しますが、「APR not found」というエラーが発生します。

[root@file tmp]# cd httpd-2.4.23/
[root@file httpd-2.4.23]# ./configure
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... no
configure: error: APR not found.  Please read the documentation.

3.APR と APR-Utilの準備

Apache Portable Runtimeのダウンロードのページにアクセスして、

  • apr-1.5.2.tar.gz
  • apr-util-1.5.4.tar.gz

をダウンロード。

Apache Portable Runtime

サーバにアップロードして展開します。

[root@file tmp]# tar -zxvf apr-1.5.2.tar.gz
apr-1.5.2/
apr-1.5.2/config.layout
apr-1.5.2/build.conf
 :
apr-1.5.2/libapr.rc
[root@file tmp]# tar -zxvf apr-util-1.5.4.tar.gz
apr-util-1.5.4/
apr-util-1.5.4/libaprutil.dep
apr-util-1.5.4/xlate/
 :
apr-util-1.5.4/encoding/apr_base64.c

展開したディレクトリをApacheのsrclibディレクトリにコピー。

[root@file tmp]# cp -Rp ./apr-1.5.2  ./httpd-2.4.23/srclib/apr
[root@file tmp]# cp -Rp ./apr-util-1.5.4 ./httpd-2.4.23/srclib/apr-util

4.configure実行(2回目)

再度configureを実行しますが、今度は「pcre-config for libpcre not found.」というえらーに遭遇します。

[root@file httpd-2.4.23]# ./configure
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
 :
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

5.PCREをインストール

PCREのページにアクセスして、「pcre-8.39.tar.gz」をダウンロード(ソースからビルドしてインストールするのであればC++コンパイラ(g++)が必要)。

pcre-8.39.tar.gz

アーカイブを展開して下記を実行。

[root@file tmp]# tar xvzf pcre-8.39.tar.gz
[root@file tmp]# cd pcre-8.39
[root@file pcre-8.39]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
   :
    Link pcretest with libreadline .. : no
    Valgrind support ................ : no
    Code coverage ................... : no
[root@file pcre-8.39]# make
rm -f pcre_chartables.c
ln -s ./pcre_chartables.c.dist pcre_chartables.c
make  all-am
make[1]: ディレクトリ `/tmp/pcre-8.39' に入ります
  CC       libpcre_la-pcre_byte_order.lo
  CC       libpcre_la-pcre_compile.lo
 :
  CXX      pcre_stringpiece_unittest-pcre_stringpiece_unittest.o
  CXXLD    pcre_stringpiece_unittest
make[1]: ディレクトリ `/tmp/pcre-8.39' から出ます
[root@file pcre-8.39]# make install
make  install-am
make[1]: ディレクトリ `/tmp/pcre-8.39' に入ります
make[2]: ディレクトリ `/tmp/pcre-8.39' に入ります
 :
make[3]: ディレクトリ `/tmp/pcre-8.39' から出ます
make[2]: ディレクトリ `/tmp/pcre-8.39' から出ます
make[1]: ディレクトリ `/tmp/pcre-8.39' から出ます

6.configure実行(3回目)

これでconfigure実行が正常に終了します。

[root@file httpd-2.4.23]# ./configure
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
 :
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands

7.make

makeを実行します。

[root@file httpd-2.4.23]# make
Making all in srclib
make[1]: ディレクトリ `/tmp/httpd-2.4.23/srclib' に入ります
Making all in apr
make[2]: ディレクトリ `/tmp/httpd-2.4.23/srclib/apr' に入ります
make[3]: ディレクトリ `/tmp/httpd-2.4.23/srclib/apr' に入ります
 :
make[2]: ディレクトリ `/tmp/httpd-2.4.23/modules' から出ます
make[2]: ディレクトリ `/tmp/httpd-2.4.23/support' に入ります
make[2]: ディレクトリ `/tmp/httpd-2.4.23/support' から出ます

make[1]: ディレクトリ `/tmp/httpd-2.4.23' から出ます

8.make install

make installを実行します。

[root@file httpd-2.4.23]# make install
Making install in srclib
make[1]: ディレクトリ `/tmp/httpd-2.4.23/srclib' に入ります
Making install in apr
make[2]: ディレクトリ `/tmp/httpd-2.4.23/srclib/apr' に入ります
make[3]: ディレクトリ `/tmp/httpd-2.4.23/srclib/apr' に入ります
 :
mkdir /usr/local/apache2/man/man1
mkdir /usr/local/apache2/man/man8
mkdir /usr/local/apache2/manual
make[1]: ディレクトリ `/tmp/httpd-2.4.23' から出ます

これでApacheのインストールが完了しました。

Comments [0] | Trackbacks [0]

Finaleで小節を前後の組段へ移動する方法

November 21,2016 12:33 AM
Category:[Finale]
Tag:[Finale]
Permalink

Finaleで小節を前後の組段へ移動する方法を紹介します。

1.問題点

Finaleである小節を後の組段、または前の組段に移動したいのですが方法が分かりません。

たとえば、下の画像のように赤枠の13小節目を次の段の最初に移動させたい場合などです。

(クリックで拡大、以下同様)
13小節目を次の段の最初に移動

2.小節を後の組段へ移動する

小節を後の組段へ移動するには、「選択」ツールをクリック。

「選択」ツール

移動させたい小節をクリック。

移動させたい小節をクリック

「ユーティリティ」→「選択小節を後の組段へ移動」をクリック。

選択小節を後の組段へ移動

これで選択した小節が後の組段へ移動します。

選択した小節が後の組段へ移動

3.複数の小節を後の組段へ移動する

複数の小節を次の組段へ移動したい場合(例えば段の最後の3小節を下へ移動したい場合)は、それらのうち最初の小節をクリック。

複数の小節を次の組段へ移動

これで最後の3小節が後の組段へ移動します。

複数の小節を次の組段へ移動

4.小節を前の組段へ移動する

小節を前の組段へ移動するには、2項と同様の手順で移動させたい小節をクリック。

移動させたい小節をクリック

「ユーティリティ」→「選択小節を前の組段へ移動」をクリック。

選択小節を前の組段へ移動

これで選択した小節が前の組段へ移動します。

選択した小節が前の組段へ移動

5.複数の小節を前の組段へ移動する

複数の小節を前の組段へ移動したい場合(例えば段の最初の3小節を上へ移動したい場合)は、それらのうち最後の小節をクリック。

複数の小節を前の組段へ移動

これで最初の3小節が前の組段へ移動します。

複数の小節を前の組段へ移動

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages