gcc/g++のコンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処

May 26,2017 12:03 AM
Category:[C/C++]
Tag:[C++]
Permalink

gcc/g++のコンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処方法を紹介します。

1.問題点

g++のコンパイルで下記のエラーが発生しました。

% g++ sample.cc
g++: コンパイラ内部エラー: Segmentation fault (プログラム cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.

数日前に同じファイルをコンパイルしたときには正常に終了しました。

が違いが分かりません。

ということで、コンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処方法を紹介します。

2.原因

原因は2つあり、1つはコンパイルしたファイルのサイズがかなり大きかったことでした。

そしてもうひとつは、別の作業でulimitコマンドでスタックサイズの上限を小さく(1000)していたためのようです。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimite

3.対処

スタックサイズを無制限に変更することでエラーが解消しました。

# ulimit -s unlimited
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Comments [0] | Trackbacks [0]

Linuxでコアダンプを出力する方法

May 25,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxでコアダンプ(core)を出力する方法を紹介します。

1.問題点

Segmentation faultを発生させるC++プログラムを実行しました。

% ./a.out
Segmentation fault (コアダンプ)

が、ディレクトリにはcoreが出力されていませんでした。

出力されていない原因が分かりません。

ということで、coreを出力する方法を紹介します。

2.coreを出力する

coreを出力するには、まずulimitコマンドで現在の設定を確認します。ulimitはシステムリソースの上限を設定するためのコマンドで"-a"オプションで設定を確認できます。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

赤字の部分がcoreの出力設定です。"0"になっているので出力できない状態になっています。

"ulimit -c"でコアダンプの出力サイズを設定します。

# ulimit -c unlimited

"unlimited"は無制限を意味します。

サイズを設定したい場合は、

# ulimit -c 1000000

のようにします。

再度、ulimitコマンドで現在の設定を確認します。

# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
 :

これでcoreが出力できる準備ができました。

もう一度Segmentation faultを発生させてみます。

% ./a.out
Segmentation fault (コアダンプ)
% ls -l
-rwxr-xr-x 1 hoge hoge   10419  5月 24 08:49 a.out
-rw------- 1 hoge hoge  425984  5月 24 09:03 core.18212

coreが出力できました。

Comments [0] | Trackbacks [0]

Firefox/Chromeでtable要素の「position: sticky」が動作しない問題の対処

May 23,2017 12:03 AM
Category:[Google Chrome]
Tag:[]
Permalink

Firefox/Chromeでtable要素の「position: sticky」が動作しない問題の対処方法を紹介します。

1.問題点

テーブルのヘッダ部分がページの上部にさしかかると「position: sticky」で表示が固定されるサンプルを作りました。

<style>
table {
  border-collapse: collapse;
  width: 600px;
}
thead {
  position: sticky;
  top: 0px;
  background: grey;
}
th, td {
  border: solid 1px #00
0000;
}
</style>
<body>
<p>1</p>
<table>
  <thead>
    <tr>
      <th>1-1</th>
      <th>1-2</th>
      <th>1-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>2</p>
<table>
  <thead>
    <tr>
      <th>2-1</th>
      <th>2-2</th>
      <th>2-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>3</p>
<table>
  <thead>
    <tr>
      <th>3-1</th>
      <th>3-2</th>
      <th>3-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>4</p>
<table>
  <thead>
    <tr>
      <th>4-1</th>
      <th>4-2</th>
      <th>4-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
</body>

サンプル1

少し前のバージョンのFirefoxやChromeであればこれでヘッダ部分が固定されたのですが、いつの間にか固定されなくなりました。

ということで、tableで「position: sticky」を有効にする方法を調べました。

確認したブラウザのバージョンは下記です。

  • Chrome:58.0.3029.110
  • Firefox:53.0.3

2.tableで「position: sticky」を有効にする

tableで「position: sticky」を有効にするには、下記のCSSを追加する必要があります。

thead, tbody {
  display: table;
}
th, td {
  width: 200px;
}

解説ですが、まずthead要素に「display: table」を追加すればヘッダは固定されるようになります。

thead {
  display: table;
}

ただしこれだけでは幅のレイアウトが崩れてしまうため、tbody要素にも「display: table」を追加し、さらに各th,td要素にwidthプロパティを追加してセル幅を調整します。

このサンプルでは各列のセルが均等幅なので対応できましたが、列ごとにセル幅が異なると厳しいかもしれません。

あと、firefoxでは、

table, tr {
  display: table;
}

も必要っぽいです。

これがないと、スクロールアップしたときに一番上のテーブルのヘッダがきれいに戻らないようです。

サンプル2

3.参考サイト

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

Comments [0] | Trackbacks [0]

VBAでセルの罫線に描画する方法

May 17,2017 12:03 AM
Category:[VB/VBA]
Tag:[Excel, VBA]
Permalink

VBAでセルの罫線に描画する方法を紹介します。

VBAでセルの罫線に描画する

1.問題点

VBAでセルの罫線上に、冒頭のスクリーンショットのように矢印を描画する作業が発生しました。

描画する際に分かっている情報は、セルの番地ではなく、開始点および終点の行と列の番号(「3,2」や「3,5」など)ですが、この情報を元に描画する方法が分かりません。

ということで、セルの罫線に描画する方法を紹介します。

2.セルの罫線に描画する

描画するサンプルを下記に示します。

Sub Test()
    Dim start_cell As String
    Dim end_cell As String
    Dim myRange As Range
 
    start_cell = Cells(3, 2).Address
    end_cell = Cells(3, 5).Address
    Set myRange = Range(start_cell, end_cell)
 
    With ActiveSheet.Shapes.AddLine(myRange.Left, myRange.Top, myRange.Left + myRange.Width, myRange.Top).Line
       .ForeColor.RGB = vbBlack
       .EndArrowheadStyle = msoArrowheadTriangle
    End With
End Sub

以下、コードの解説です。

開始点となるセルの番地をCellsプロパティで取得します。セルの番地が予め分かっていればこの行は不要です。

start_cell = Cells(3, 2).Address

同様に、終点となるセルの番地を取得します。

end_cell = Cells(3, 5).Address

Rangeプロパティで2つのセルの範囲を取得します。

Set myRange = Range(start_cell, end_cell)

下のように、Cellsプロパティとあわせて1行にまとめることもできます。

Set myRange = Range(Cells(3, 2), Cells(3, 5))

最後にShapes.AddLineメソッドで線を描画します。

With ActiveSheet.Shapes.AddLine(myRange.Left, myRange.Top, myRange.Left + myRange.Width, myRange.Top).Line
   .ForeColor.RGB = vbBlack
   .EndArrowheadStyle = msoArrowheadTriangle
End With

AddLineメソッドのパラメータは次のとおりです。

  • 第1パラメータ:開始点のX座標
  • 第2パラメータ:開始点のY座標
  • 第3パラメータ:終了点のX座標
  • 第4パラメータ:終了点のY座標

上記のサンプルでは、各パラメータに次のようにあてはめています。

  • 第1パラメータ(開始点のX座標):Rangeプロパティの左端
  • 第2パラメータ(開始点のY座標):Rangeプロパティの上端
  • 第3パラメータ(終了点のX座標):Rangeプロパティの左端に横幅を加えたもの
  • 第4パラメータ(終了点のY座標):Rangeプロパティの上端

また、

  • ForeColor.RGB
  • EndArrowheadStyle

は、線の色および終点のスタイル(矢印)を指定しています。

これで冒頭のスクリーンショットのような線を描画することができます。

点線の場合はAddLineメソッドに下記を追加します。

.DashStyle = msoLineDash
Comments [0] | Trackbacks [0]

C++で「Enable multithreading to use std::thread: Operation not permitted」というエラーになる場合の対処

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

C++で「Enable multithreading to use std::thread: Operation not permitted」というエラーになる場合の対処について紹介します。

1.問題点

C++11で実装されたstd::threadを使ったプログラムを作ってみました。

sample.cpp

#include <cstdlib>
#include <iostream>
#include <thread>
 
void task(const std::string msg) {
    std::cout << msg << std::endl;
}
 
int main(int argc, char **argv) {
    std::thread t(task, "Hello World!!");
    t.join();
    return 0;
}

が、このプログラムを実行すると下記の「Enable multithreading to use std::thread: Operation not permitted」というエラーが発生します。

% g++ -std=c++11 sample.cpp
% ./a.out
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
中止 (コアダンプ)

が、このエラーが発生する理由がわかりません。

ということで、このエラーになる場合の対処について紹介します。

2.原因と対処

原因は、コンパイル時に"-pthread"オプションを付与していないためです。

std::threadを利用したプログラムで"-pthread"オプションなしでコンパイルすると、コンパイル時にはエラーにならずに実行時エラーになります。

ということで、"-pthread"オプションを付与してコンパイルすればOKです。

% g++ -std=c++11 -pthread sample.cpp
% ./a.out
Hello World!!

3.参考サイト

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

Comments [0] | Trackbacks [0]

C++でスレッドIDを取得する方法

May 11,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C++でスレッドIDを取得する方法を紹介します。

1.問題点

C++11で実装されたstd::threadを使ったプログラムを作ってみました。

sample.cpp

#include <cstdlib>
#include <iostream>
#include <thread>
 
void task1(const std::string msg) {
    std::cout << "task1:" << msg << std::endl;
}
 
void task2(const std::string msg) {
    std::cout << "task2:" << msg << std::endl;
}
 
int main(int argc, char **argv) {
    std::thread t1(task1, "Hello World!!");
    std::thread t2(task2, "Hello World!!");
    t1.join();
    t2.join();
    return 0;
}

このプログラムで、各スレッドのスレッドIDを調べたいのですが方法が分かりません。

ということで、C++でスレッドIDを取得する方法を紹介します。

2.スレッドIDを取得する

スレッドIDを取得するには、task1()およびtask2()にstd::this_thread::get_id()を追加します。

...(略)...
void task1(const std::string msg) {
    std::cout << "task1:" << msg << std::endl;
    std::cout << "task1 thread:" << std::this_thread::get_id() << std::endl;
}
 
void task2(const std::string msg) {
    std::cout << "task2:" << msg << std::endl;
    std::cout << "task2 thread:" << std::this_thread::get_id() << std::endl;
}
...(略)... 

実行結果(実行結果はスレッド動作に依存します)

% ./a.out
task2:Hello World!!
task1:Hello World!!
task2 thread:140031416473344
task1 thread:140031424866048

main()で各スレッドのスレッドIDを取得したい場合は、次のようにします。

...(略)...
int main(int argc, char **argv) {
    std::thread t1(task1, "Hello World!!");
    std::thread t2(task2, "Hello World!!");
    std::cout << "main thread:" << std::this_thread::get_id() << std::endl;
    std::cout << "t1 thread:" << t1.get_id() << std::endl;
    std::cout << "t2 thread:" << t2.get_id() << std::endl;
    t1.join();
    t2.join();
    return 0;
}

実行結果(実行結果はスレッド動作に依存します)

% ./a.out
main thread:140046616794944
task2:Hello World!!
task1:Hello World!!
t1 thread:140046599993088
t2 thread:140046591600384

上の例では直接出力しましたが、スレッドIDを変数に代入する場合は次のように記述します。

自分のスレッドIDを変数に保持

std::thread::id this_id = std::this_thread::get_id();

スレッドオブジェクトのスレッドIDを変数に保持

std::thread t1;
std::thread::id this_id = t1::get_id();

3.参考サイト

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

Comments [0] | Trackbacks [0]

iPhoneのボイスメモを大音量で聴く方法

May 2,2017 12:55 AM
Category:[iPhone]
Tag:[iPhone]
Permalink

iPhoneのボイスメモを大音量で聴く方法を紹介します。

1.問題点

iPhoneのボイスメモで録音した内容を大きい音量で聴きたいのですが、音量を最大にしてもiPhoneに耳を近づけないと聴こえません。

仲間同士でボイスメモを聞きたいときなど、これでは使い物になりません。

ということで、iPhoneのボイスメモを大音量で聴く方法を紹介します。

2.ボイスメモの録音を大音量で聴く

ボイスメモの録音を大音量で聴くには、保存したボイスメモをタップ。

ボイスメモ

左のアイコンをタップ。

アイコン

「メモに追加」をタップ。

メモに追加

保存画面が表示されるので、追加するテキストもなく、保存先のメモを選択しないのであれば、そのまま「保存」をタップ。

保存

ホーム画面に戻って「メモ」をタップ。

メモ

追加した録音が「1本のオーディオ録音」というサブタイトルで保存されているのでタップ。

1本のオーディオ録音

再生ボタンをタップすれば、ボイスメモより大きい音量で再生されます。

再生

Comments [0] | Trackbacks [0]

Facebookのテキスト投稿に背景色をつける方法

April 28,2017 12:03 AM
Category:[Facebook]
Tag:[Facebook]
Permalink

Facebookのテキスト投稿に背景色をつける方法を紹介します。

Facebookのテキスト投稿に背景色をつける

1.はじめに

Facebookのテキスト投稿はデフォルトの設定ではこのように白の背景です。

Facebookのテキスト投稿

ですが、冒頭のように背景色をつける方法もあります。

ということで、テキスト投稿に背景色をつける方法を紹介します。

ここではPC版の操作方法を説明します。

2.テキスト投稿に背景色をつける

テキスト投稿に背景色をつけるには、投稿フォーム下にある「…」をクリック。

「背景カラー」をクリック。

背景カラー

背景にしたい色をクリック。ここではオレンジを選択します。

背景にしたい色をクリック

テキストエリアに選択した背景色がつき、テキストがセンタリングで入力できるようになります。また選択した背景色のアイコンは白抜きで表示されます。

テキストがセンタリングで入力

任意のテキストを入力して「投稿」をクリック。この状態で背景色を変更することもできます。また白に戻すには一番左のアイコンをクリックします。

投稿

これで背景色のついたテキストが投稿されます。

背景色のついたテキスト

Comments [0] | Trackbacks [0]

C++のoperator new/operator deleteについて

April 25,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C++のoperator new/operator deleteについて紹介します。

1.サンプル

まず最初にサンプルをご覧ください。

#include <cstdio>
#include <cstdlib>
 
class Test {
 
private:
 
    int number;
 
public:
 
    Test(int num) {
        number = num;
        std::printf("constructor: %d\n", number);
    }
 
    ~Test() {
        std::printf("destructor\n");
    }
 
    void* operator new(std::size_t sz) {
        std::printf("operator new: %zu\n",sz);
        return std::malloc(sz);
    }
 
    void operator delete(void* ptr) {
        std::printf("operator delete: %p\n", ptr);
        std::free(ptr);
    }
};
 
int main() {
     Test* test = new Test(100);
     delete test;
}

このサンプルを元にoperator new/operator deleteについて紹介します。

2.operator new/operator deleteとは

operator new/operator deleteは、コンストラクタ起動時、特定のエリアからメモリを確保(または解放)するための仕組みです。

通常のコンストラクタは、

  • メモリの割当
  • オブジェクトの構築

という2つの動作を行いますが、operator newはメモリの割り当てを実行します。

サンプルでは下記の部分になります。

void* operator new(std::size_t sz) {
    std::printf("operator new: %zu\n",sz);
    return std::malloc(sz);
}

引数の"size_t"はC++の仕様で決められたもので、オブジェクトのサイズになります。

ユーザーがコンストラクタ起動時にパラメータにサイズを指定する必要はありません(おそらくコンパイラ時にオブジェクトのサイズが分かる)。

また、戻り値の型は"void *"です。

operator deleteは下記の部分です。

void operator delete(void* ptr) {
    std::printf("operator delete: %p\n", ptr);
    std::free(ptr);
}

引数は確保したアドレスになります。こちらもデストラクタ起動時のパラメータに指定する必要はありません。

3.newとoperator newの違い

operator newはnewのオーバーロード(引数や戻り値が異なるが名称が同一のメソッドを複数定義すること)ですが、operator newとnewが存在する場合、順番に起動されることから、個人的には通常のオーバーロードとは動作が異なる気がします。

具体的には、ユーザープログラムがコンストラクタを実行すると、先にoperator newが起動されてメモリ確保等を行い、その後通常のコンストラクタが起動するようになっています。

デストラクタの動作はその逆で、先に通常のデストラクタが起動され、operator deleteが動作してメモリ解放を行います。

サンプルで説明すると、mainに記述した、

Test* test = new Test(100);

が実行されることで、最初に、

void* operator new(std::size_t sz) { ... }

が起動してmallocでメモリを確保し、その後

Test(int num) { ... }

が起動します。

サンプルの実行結果は下記のようになります。

operator new: 4
constructor: 100
address: 0x12a9010
destructor
operator delete

「4」というのは、クラスで定義した変数

int number;

のサイズになります。

4.参考サイト

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

Comments [0] | Trackbacks [0]

Jenkinsのインストール(Windows版)

April 18,2017 12:55 AM
Category:[Jenkins]
Tag:[Jenkins]
Permalink

Jenkinsのインストール(Windows版)について紹介します。

jenkinsのページにアクセスして、「Download」をクリック。

「Long-Term Support」の下にある「Windows」をクリックすればダウンロードが開始します。

ダウンロードしたアーカイブを展開して、jenkins.msiを実行すればインストールウィザードが開始します。

(クリックで拡大、以下同様)

インストール終了後、"http://localhost:8080"にアクセスして下記のページを開きます(または自動的に開きます)。

「Administrator password」に、C:\Program Files\Jenkins\secrets\initialAdminPasswordに記載されたパスワードをペーストして「Continue」をクリック。

通常はここで「Install suggested plugins」という画面になりますが、Proxyサーバが設置されていて正常に外部にアクセスできない環境では「Offline」と表示されるようです。

ということで、「Configure Proxy」をクリック。

プロキシサーバのIPアドレス・ポートなどを入力して、「Save and Continue」をクリック。

接続が正常に行えるようになれば次の画面が表示されるので、「Install suggested plugins」をクリック。正常に接続できない場合、画面をリロードすれば最初の画面に戻れます。

画面が切り替わり、プラグインのインストールが開始します(完了まで数分かかります)。

最後にJenkinsを利用するユーザーを作成し、「Save and Finish」をクリック。

これでインストール完了です。

「Start using Jenkins」をクリックすると次のような画面が表示されます。

Comments [0] | Trackbacks [0]

AIXでカーネルbitモードを判定する方法

April 14,2017 12:03 AM
Category:[Linux]
Tag:[AIX]
Permalink

AIXでカーネルbitモードを判定する方法を紹介します。

AIXはIBMのUNIXオペレーティングシステムのブランド名です。

1.問題点

Linuxでカーネルbitモードを判定するには、"uname -a"を利用します。

% uname -a
Linux file.hoge.local 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

i686やi386と表示された場合は32bitモード、X86_64やamd64と表示された場合は64bitモードになります。

がAIXで"uname -a"を入力しても期待する出力になりません。

% uname -a
AIX hoge 2 7 00F73ACC5C00

ということで、AIXでカーネルbitモードを判定する方法を紹介します。

2.カーネルbitモードを判定する

カーネルbitモードを判定するには、rootユーザーで"bootinfo -K"を利用します。

# bootinfo -K
64

"32"が32bitモード、"64"が64bitモードを指します。

Comments [0] | Trackbacks [0]

C/C++で「`shm_open' に対する定義されていない参照です」というエラーになった場合の対処

April 13,2017 12:55 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C/C++で「`shm_open' に対する定義されていない参照です」というエラーになった場合の対処方法について紹介します。

1.問題点

shm_openとshm_unlinkを使用する下記のサンプルコードを書きました。

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
 
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
 
int main() {
    int* ptr;
    int fd;
    int ret;
 
    fd = shm_open("/test",  O_CREAT | O_RDWR, FILE_MODE);
    if(fd == -1) {
        exit;
    }
 
    ret = ftruncate(fd, sizeof(int));
    ptr = mmap (0, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if(ptr == MAP_FAILED) {
        exit;
    }
    printf("ptr:%p\n", ptr);
 
    if (ret = shm_unlink("/test")) {
        fprintf (stderr, "shm_unlink(shm_struct) failed\n");
    }
    return 1;
}

このコードをコンパイルすると、下記のように「shm_openおよびshm_unlinkの実装が定義されていない」というエラーが発生します。

% gcc shm.c
/tmp/cctpXmiN.o: 関数 `main' 内:
shm.c:(.text+0x18): `shm_open' に対する定義されていない参照です
shm.c:(.text+0x7b): `shm_unlink' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました

ということで、「`shm_open' に対する定義されていない参照です」というエラーになった場合の対処方法について紹介します。

2.対処方法

調べたところ、コンパイルオプションに"-lrt"を付与することで解消します。

% gcc -lrt shm.c

"-l"はリンケージ時のライブラリ(ここではrt)を指定するためのオプションです。

Comments [0] | Trackbacks [0]

iptablesでhttp・https接続を許可する方法

April 11,2017 12:03 AM
Category:[Linux]
Tag:[]
Permalink

iptablesでhttp・https接続を許可する方法を紹介します。

1.問題点

使い回しのLinuxサーバにApacheをインストールしましたが、外部からアクセスするとタイムアウトが発生します。

Linux内部からのアクセスはOKなので、iptablesで接続が許可されていない可能性があります。

ということで、iptablesでhttp・https接続を許可する方法を紹介します。

2.iptablesでhttp・https接続を許可する

iptablesの設定状況を確認するには"-L"オプションを指定します。

情報が設定されていれば次のような内容が表示されます。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ms-wbt-server
ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:ntp
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

ちなみに、iptablesに何も設定していない状態であれば次のように表示されます。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

また、"--line-numbers"を設定すれば、一番左に"num"が表示されます。

# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
5    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ms-wbt-server
6    ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:ntp
7    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

iptablesのルールは上から適用されるようで、http接続を許可するための新しいルールは7番目のREJECTよりも上に設定する必要があります。

今回はすでにiptablesが設定された状態のため、5と6の間に新しいルール(http接続許可)を、下記のコマンドで追加します。

# iptables -I INPUT 6 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

以下、パラメータの説明です。

"-I INPUT 6"でルールを追加する位置を指定します。「6」を指定したので5の直後にルールが追加され、既存の「6」以降のルールはひとつずつ後ろにずれます。

"--state NEW"は接続開始要求パケット(SYNパケット)のみ許可することを意味します。

上記のstateマッチを利用するため、"-m state"もペアで設定し、拡張モジュールを指定します。

"-p tcp"はTCPプロトコルを指定します。"-m tcp"もペアで設定し、拡張モジュールを指定します(/etc/sysconfig/iptablesでは暗黙的に設定されているもので、コマンドラインでは設定不要かも)。

"--dport 80"でポート番号80(http)を指定します。httpsの場合は80の部分が443になります。

"-j ACCEPT"で許可を指定します。

設定後の表示は次のようになります(赤色が追加された内容)。

# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
5    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ms-wbt-server
6    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
7    ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:ntp
8    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

設定変更後、iptablesを再起動しなくてもhttp接続OKになりました。

3.iptablesの設定を削除する

もしiptablesの設定を削除したいのであれば、

# iptables -F

を実行します。

4.参考サイト

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

Comments [0] | Trackbacks [0]

楽天トラベルで領収書を取得する方法

April 7,2017 12:03 AM
Category:[その他]
Tag:[Rakuten]
Permalink

楽天トラベルで領収書を取得する方法を紹介します。

1.はじめに

会社の出張で楽天トラベルを使ってホテルを予約しました。

出張後、会社にホテルの領収書提示が必要だったのですが、フロントでもらうのをうっかり忘れてしまいました。

なんとかならないか調べてみたところ、楽天トラベルで予約した場合、オンラインで領収書を発行してもらえることが分かりました。

ということで、楽天トラベルで領収書を取得する方法を紹介します。

2.領収書を取得する

領収書を取得するには、楽天トラベルのページからログイン。

楽天トラベルのページ

「予約の確認・キャンセル」をクリック。

予約の確認・キャンセル

「キャンセル済・過去の予約」をクリック。

予約の確認・キャンセル

該当予約の「領収書発行」をクリック(画面は2回目なので「再発行」になっています)。

(クリックで拡大)
領収書発行

宛名を適切な内容に変更して「宛名確認へ」をクリック。

宛名確認へ

宿泊所の住所をいれたい場合はチェックボックスをチェックして「領収書発行」をクリック。

領収書発行

このあと領収書画面が表示されるので、印刷すればOKです。

領収書は「発行」と「再発行」で2回まで表示できるようです。

Comments [0] | Trackbacks [0]

gcc/g++でリンカスクリプトを調べる方法

April 5,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

gcc/g++でリンカスクリプトを調べる方法を紹介します。

1.問題点

下記のサンプルコードを作りました。

sample.cpp

#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;
}

このコードをビルドするときに実行されるリンカスクリプト(プログラムやデータをどのアドレスに配置するかを決めるためのスクリプト)を調べたいのですが、調べる方法が分かりません。

ということで、リンカスクリプトを調べる方法を紹介します。

2.リンカスクリプトを調べる

リンカスクリプトを調べるには、ビルド時にオプション"-Wl,--verbose"を付与します。

% g++ -Wl,--verbose sample.cpp

"-Wl,option"でオプションoptionをリンカに渡します。

optionがカンマを含む場合、複数のオプションとして分割されます。

リンカオプション"--verbose"は、ld のバージョン番号を表示し、サポートされているエミュレーションをリストします。

コマンド実行結果が下記で、"========"で括られた部分がリンカスクリプトになります。

% g++ -Wl,--verbose sample.cpp
GNU ld version 2.23.52.0.1-55.el7 20130226
  サポートされているエミュレーション:
   elf_x86_64
   elf32_x86_64
   elf_i386
   i386linux
   elf_l1om
   elf_k1om
内部リンカスクリプトを使用しています:
==================================================
/* Script for -z combreloc: combine and sort reloc sections */
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",
              "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
ENTRY(_start)
SEARCH_DIR("/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
  .interp         : { *(.interp) }
  .note.gnu.build-id : { *(.note.gnu.build-id) }
  .hash           : { *(.hash) }
  .gnu.hash       : { *(.gnu.hash) }
  .dynsym         : { *(.dynsym) }
  .dynstr         : { *(.dynstr) }
  .gnu.version    : { *(.gnu.version) }
  .gnu.version_d  : { *(.gnu.version_d) }
  .gnu.version_r  : { *(.gnu.version_r) }
  .rela.dyn       :
    {
      *(.rela.init)
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
      *(.rela.fini)
      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
      *(.rela.ctors)
      *(.rela.dtors)
      *(.rela.got)
      *(.rela.sharable_data .rela.sharable_data.* .rela.gnu.linkonce.shrd.*)
      *(.rela.sharable_bss .rela.sharable_bss.* .rela.gnu.linkonce.shrb.*)
      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
      *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*)
      *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*)
      *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*)
      *(.rela.ifunc)
    }
  .rela.plt       :
    {
      *(.rela.plt)
      PROVIDE_HIDDEN (__rela_iplt_start = .);
      *(.rela.iplt)
      PROVIDE_HIDDEN (__rela_iplt_end = .);
    }
  .init           :
  {
    KEEP (*(SORT_NONE(.init)))
  }
  .plt            : { *(.plt) *(.iplt) }
  .text           :
  {
    *(.text.unlikely .text.*_unlikely)
    *(.text.exit .text.exit.*)
    *(.text.startup .text.startup.*)
    *(.text.hot .text.hot.*)
    *(.text .stub .text.* .gnu.linkonce.t.*)
    /* .gnu.warning sections are handled specially by elf32.em.  */
    *(.gnu.warning)
  }
  .fini           :
  {
    KEEP (*(SORT_NONE(.fini)))
  }
  PROVIDE (__etext = .);
  PROVIDE (_etext = .);
  PROVIDE (etext = .);
  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
  .rodata1        : { *(.rodata1) }
  .eh_frame_hdr : { *(.eh_frame_hdr) }
  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
  .gcc_except_table.*) }
  /* These sections are generated by the Sun/Oracle C++ compiler.  */
  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
  .exception_ranges*) }
  /* Adjust the address for the data segment.  We want to adjust up to
     the same address within the page on the next page up.  */
  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
  /* Exception handling  */
  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
  /* Thread Local Storage sections  */
  .tdata          : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
  .tbss           : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
  .preinit_array     :
  {
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array))
    PROVIDE_HIDDEN (__preinit_array_end = .);
  }
  .init_array     :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
    PROVIDE_HIDDEN (__init_array_end = .);
  }
  .fini_array     :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
    PROVIDE_HIDDEN (__fini_array_end = .);
  }
  .ctors          :
  {
    /* gcc uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first.  Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard.  The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in.  */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* We don't want to include the .ctor section from
       the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
  }
  .dtors          :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
  }
  .jcr            : { KEEP (*(.jcr)) }
  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
  .dynamic        : { *(.dynamic) }
  .got            : { *(.got) *(.igot) }
  . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .);
  .got.plt        : { *(.got.plt)  *(.igot.plt) }
  .data           :
  {
    *(.data .data.* .gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
  }
  .data1          : { *(.data1) }
  /* Sharable data sections.  */
  .sharable_data   : ALIGN(CONSTANT (MAXPAGESIZE))
  {
    PROVIDE_HIDDEN (__sharable_data_start = .);
    *(.sharable_data .sharable_data.* .gnu.linkonce.shrd.*)
    /* Align here to ensure that the sharable data section ends at the
       page boundary.  */
    . = ALIGN(. != 0 ? CONSTANT (MAXPAGESIZE) : 1);
    PROVIDE_HIDDEN (__sharable_data_end = .);
  }
  _edata = .; PROVIDE (edata = .);
  . = .;
  __bss_start = .;
  .bss            :
  {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we don't
      pad the .data section.  */
   . = ALIGN(. != 0 ? 64 / 8 : 1);
  }
  /* Sharable bss sections  */
  .sharable_bss   : ALIGN(CONSTANT (MAXPAGESIZE))
  {
    PROVIDE_HIDDEN (__sharable_bss_start = .);
    *(.dynsharablebss)
    *(.sharable_bss .sharable_bss.* .gnu.linkonce.shrb.*)
    *(SHARABLE_COMMON)
    /* Align here to ensure that the sharable bss section ends at the
       page boundary.  */
    . = ALIGN(. != 0 ? CONSTANT (MAXPAGESIZE) : 1);
    PROVIDE_HIDDEN (__sharable_bss_end = .);
  }
  .lbss   :
  {
    *(.dynlbss)
    *(.lbss .lbss.* .gnu.linkonce.lb.*)
    *(LARGE_COMMON)
  }
  . = ALIGN(64 / 8);
  . = SEGMENT_START("ldata-segment", .);
  .lrodata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
  {
    *(.lrodata .lrodata.* .gnu.linkonce.lr.*)
  }
  .ldata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
  {
    *(.ldata .ldata.* .gnu.linkonce.l.*)
    . = ALIGN(. != 0 ? 64 / 8 : 1);
  }
  . = ALIGN(64 / 8);
  _end = .; PROVIDE (end = .);
  . = DATA_SEGMENT_END (.);
  /* Stabs debugging sections.  */
  .stab          0 : { *(.stab) }
  .stabstr       0 : { *(.stabstr) }
  .stab.excl     0 : { *(.stab.excl) }
  .stab.exclstr  0 : { *(.stab.exclstr) }
  .stab.index    0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment       0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
  /* DWARF 3 */
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges   0 : { *(.debug_ranges) }
  /* DWARF Extension.  */
  .debug_macro    0 : { *(.debug_macro) }
  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.gnu_object_only) }
}
 
 
==================================================
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crti.o を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o
/tmp/cc3kRI4P.o を開くのに成功しました
/tmp/cc3kRI4P.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libstdc++.so を開くのに成功しました
-lstdc++ (/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libstdc++.so)
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libm.so を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libm.a を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libm.so を開くのに成功しました
-lm (/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libm.so)
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so を開くのに成功しました
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so)
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc.so を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc.a を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libc.so を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libc.a を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libc.so を開くのに成功しました
スクリプトファイル /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libc.so が開かれました
スクリプトファイル /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/libc.so が開かれました
/lib64/libc.so.6 を開くのに成功しました
/lib64/libc.so.6
/usr/lib64/libc_nonshared.a を開くのに成功しました
(/usr/lib64/libc_nonshared.a)elf-init.oS
/lib64/ld-linux-x86-64.so.2 を開くのに成功しました
/lib64/ld-linux-x86-64.so.2
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so を開くのに成功しました
-lgcc_s (/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so)
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc.so を開くのに失敗しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc.a を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crtn.o を開くのに成功しました
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crtn.o
ld-linux-x86-64.so.2 needed by /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libstdc++.so
found ld-linux-x86-64.so.2 at /lib64/ld-linux-x86-64.so.2
Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages