私は何をしようとしていますか? ...Mingwは静的ライブラリリンクをVS2008プロジェクトに作成しましたか?
まず、MinGWのg ++コンパイラで静的ライブラリを作成します。
ので、簡単な例のファイルがある...
TEST.H
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include <iostream>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef EXPORT_DLL_FUNCT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
DLL_API void __stdcall whatever(int a, int b);
#ifdef __cplusplus
}
#endif
#endif // EXAMPLE_H
TEST.CPP
#include "test.h"
__stdcall void whatever(int a, int b) {
std::cout << "whatever printout !!!" << std::endl;
int c = a + b;
}
私はコンパイラを使用するコマンド:
g++ -c -DEXPORT_DLL_FUNCT test.cpp -o test.o
および
g++ -shared test.o -o libtest.dll -Wl,--out-implib=libtest.a
ファイル "libtest.dll"と "libtest.a"が作成されます。なぜ両方必要ですか? VS2008プロジェクト(MSVC++)でライブラリを使用する場合は、両方のファイルが必要です.MinGWのサイトでこれを読んでいます。
次へ...私はVS2008 Win32コンソールアプリケーションプロジェクトを作成しました。このプロジェクトは、ライブラリから関数「何でも」を呼び出す予定です。
main.cppにVS2008で
#include "../mingw/test.h"
#include <iostream>
void main(void)
{
std::cout << "\n*** start ***" << std::endl;
whatever(3, 2);
std::cout << "\n*** end ***" << std::endl;
}
: "プロパティ - >リンカ - >一般 - >追加のライブラリディレクトリが" - >リンカー - 私は以前に作成したライブラリにし、「プロパティにパスを追加しました - >入力 - >追加の依存関係 "libtest.a"ファイルを追加しました。 私はプロジェクトをビルドするとき、comileとリンクはOKです、exeファイルは生成されますが、exeを実行しようとすると... segmentatinの不具合が発生します( "libtest.dll"は.exeファイルと同じフォルダにあります)! ! なぜ私は考えていない? "__stdcall"はコードで使用されているので、スタック上のものをプッシュする際に問題はありません。
何か提案してください。