私は、いくつかの顔の属性(つまり、口、鼻、目など)を見つけてラベルを付ける必要がある、画像処理プロジェクトに取り組んでいます。私はSTASM-ASMアルゴリズム(http://www.milbo.users.sonic.net/stasm/)を使用しようとしていますが、Windowsで行われた以前のプロジェクトでこの手法をすでに使用しており、非常に良い結果が得られました。
Linuxでこのユーティリティを使用しようとすると、問題が発生します。作成者から提供された指示に従って、オブジェクト.oファイルを作成しました。次に、「g ++で静的ライブラリを作成する方法」の手順に従って静的ライブラリを作成しましたか?。次に、この静的ライブラリをプロジェクトにリンクし、次のヘッダーファイルをインクルードしました。
// stasm.h
#ifndef STASM_H_
#define STASM_H_
void AsmSearchDll(int *pnlandmarks, int landmarks[], const char image_name[], const char image_data[], const int width, const int height, const int is_color, const char con f_file0[], const char conf_file1[]);
#endif
このプロジェクトを構築しようとすると、次のエラーが発生します。
undefined reference to `AsmSearchDll(int*, int*, char const*, char const*, int, int, int, char const*, char const*)'
ヘッダーファイルが正しくインクルードされていると確信しているので、これは私には非常に奇妙に思えます。また、作成者がパッケージにインクルードした.hppファイルを試してみたところ、まったく同じ結果が得られました。この問題は、Ubuntuでstasmを動作させるための試行で扱われる問題と似ています。しかし、その投稿は最終的な解決策がないままです。誰かが私がこれを解決するのを手伝ってくれることを願っています。STASM-ASMユーティリティは本当に素晴らしいです、そしてそれが提供されているのでLinuxで使用できないのは残念です。
問題は型の不一致ではないと思います。ASMSearchDll関数の呼び出しとその宣言を分析した後、これを結論付けました。この関数は次のように呼び出されます。
AsmSearchDll(&nlandmarks, landmarks, image_name, img->imageData, img->width, img->height,1 /* is_color */, NULL /* conf_file0 */, NULL /* conf_file1 */);
また、関数の定義は次のとおりです。
// stasm_dll.hpp
#ifndef stasm_dll_hpp
#define stasm_dll_hpp
extern "C"
void AsmSearchDll(
int *pnlandmarks, // out: number of landmarks, 0 if can't get landmarks
int landmarks[], // out: the landmarks, caller must allocate
const char image_name[], // in: used in internal error messages, if necessary
const char image_data[], // in: image data, 3 bytes per pixel if is_color
const int width, // in: the width of the image
const int height, // in: the height of the image
const int is_color, // in: 1 if RGB image, 0 for grayscale
const char conf_file0[], // in: 1st config filename, NULL for default
const char conf_file1[]); // in: 2nd config filename, NULL for default, "" if none
#endif // stasm_dll_hpp
さらに、関数に渡されるパラメーターの1つの形式を変更すると、次のようなエラーが発生します。
../src/PruebaStasm.cpp:44:155: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
../src/stasm_dll.hpp:6:6: error: initializing argument 1 of ‘void AsmSearchDll(int*, int*, const char*, const char*, int, int, int, const char*, const char*)’ [-fpermissive]
提供されたmakefileを使用して.oファイルを再度コンパイルしました。これらの.oファイルは、このチュートリアルに従って共有およびダイナミックライブラリを作成しました:http ://www.yolinux.com/tokyoS/LibraryArchives-StaticAndDynamic.html
問題がどこにあるのかわかりません。
よろしくお願いします、
ルイス