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]
 1  |  2  |  3  |  4  |  5  | All pages