3

私がやりたいことは:

  • 共有ライブラリを作成し、その API をエクスポートして他のプログラムで使用できるようにする
  • ライブラリを使用する同じプロジェクトで単純な実行可能ファイルを作成します (たとえば、ライブラリの使用方法の具体的な例を示すため)
  • cmake を使用してビルドします。Visual Studio (2010) および Windows 7 で動作する必要があります。

私はこのコードを試しました(クイックテストケース):

CMakeLists.txt

PROJECT (minimalcpp)
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)

SET(LIBSAMPLE_HEADERS func_simple.h)
SET(LIBSAMPLE_SRCS func_simple.cpp)

ADD_LIBRARY (minimalcpp SHARED ${LIBSAMPLE_SRCS})

ADD_EXECUTABLE (test-pure-cpp test-pure-cpp.cpp)
TARGET_LINK_LIBRARIES (test-pure-cpp minimalcpp)

# THIS WORKS BUT IT IS NOT WHAT I WANT :
# ADD_EXECUTABLE (test-pure-cpp test-pure-cpp.cpp ${LIBSAMPLE_SRCS})

macros.h

#ifndef MACROS_H
#define MACROS_H

#if defined _WIN32 || defined __CYGWIN__
    #if minimalcpp_EXPORTS
        #define MINIMALCPP_API __declspec(dllexport)
    #else
        #define MINIMALCPP_API __declspec(dllimport)
    #endif
#endif

#endif

func_simple.h

#ifndef LIB_SAMPLE_FUNC_SIMPLE_H
#define LIB_SAMPLE_FUNC_SIMPLE_H

#include "macros.h"

namespace sample {
MINIMALCPP_API void f1(int nmax);
}

#endif // LIB_SAMPLE_FUNC_SIMPLE_H

func_simple.cpp

#include <iostream>
#include "func_simple.h"

void sample::f1(int nmax) {
  int i ;
  for(i=0 ; i < nmax ; i++) {
    std::cout << i << " -> " << i*i << std::endl;
  }
}

テスト純粋な cpp.cpp

#include "func_simple.h"

int main(int argc, char *argv[]){
    sample::f1(5);
    return 0;
}

このコードはコンパイルされますが、実行時に直接クラッシュします。

エラーメッセージ :

Le programme s'est terminé subitement.
... a quitté avec le code -1073741515

私は Windows での C++ の初心者ですが、何が間違っていましたか? どうもありがとうございました

4

1 に答える 1