ブログ

Armadillo-440:QtCreatorでC言語の静的ライブラリをリンクする方法

at_kazutaka.bito
2015年10月19日 18時52分

Armadillo-440でGUIの開発にQtを使用する際、Howto : Armadillo-440でQt! 第3回のように 開発環境としてQtCreatorが使用できる。

このQtCreatorを使って、別途作成したC言語のプログラムを静的ライブラリでリンクさせる際、 ひと工夫必要だったため、下記に手順を示す。

参考になったのは、C++ソースからCで作成済みのライブラリをリンクできないの記事である。 QtはC++なので、C言語のライブラリをリンクするにはこの記事の方法を適用する必要がある。

1.C言語でライブラリを作成。

ここではC言語のライブラリのサンプルとして、文字列を与えると/home/ftp/pub/temp.txtに文字列を出力する textoutという関数のプログラムを用意した。 ソースコードlib_textout.tar.gzを添付する。 lib_textout.tar.gzを解凍したディレクトリ内でmakeすると、libtextout.aというファイルが生成される。

2.QtCreatorでライブラリを追加。

・ライブラリの選択 「プロジェクト名」を右クリックしてメニューの中から「ライブラリを追加」を選択。

「外部ライブラリ」を選択して次へ。

「ライブラリファイル」に上記手順1の「libtextout.a」を選択して完了する。(インクルードパスは自動的に設定される)

・ヘッダファイルの選択 「ヘッダー」を右クリックしてメニューの中から「既存のファイルを追加」を選択して、 上記手順1のlib_textout内のtextout.hを選択。

3.Qtのソースファイルで、C言語のライブラリのヘッダファイルまたは関数宣言をextern "C" {}で囲んでインクルードする。

extern "C" {
    #include "textout.h"
}

補足)extern "C"の{}内に、ヘッダファイル名ではなく、関数宣言を記述することも可能。

例えば、mainwindow.cppで、下記のようにtextout.hをインクルードして、texout("Hello")を実行するように記述すると、 Mainwindowが開いた際に、"Hello"という文字列が記述された/home/ftp/pub/temp.txtが生成される。

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
extern "C" {
    #include "textout.h"
}
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    textout("Hello");
}
 
MainWindow::~MainWindow()
{
    delete ui;
}