Maven NARプラグインを使用して非常に単純なC++プログラムを構築しようとしています。私は、共有ライブラリを構築するためのMavenモジュールと、ライブラリをリンクし、それを使用する実行可能ファイルを構築するためのMavenモジュールをセットアップしました。 Macを使ってビルドするとすばらしいことができ、プログラムを実行できます。残念ながら、MS Visual C++(フリーバージョン)を使用してWindows(XP)をビルドするとリンカーエラーが発生します。 2つのマシン(OSとコンパイラ以外)のコンフィギュレーションの唯一の違いは、WindowsマシンでMavenをビルドする前にvcvars32.batを実行することです。ここで私は取得していますエラーです:Maven NARプラグインを使用したWindows上でのDLLへのリンク
link /MANIFEST /NOLOGO /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /OUT:executable.exe
C:\dev\Projects\trunk\executable\target\nar\obj\x86-Windows-msvc\main.obj
が、私はそれが記載されている私の共有ライブラリモジュールによって生成されたDLLを持っている必要があり期待し、しかし:リンカコマンドはNARプラグインによって吐き出す
main.obj : error LNK2019: unresolved external symbol "public: int __thiscall
Calculator::add(int,int)" ([email protected]@@[email protected]Z) referenced in function
_main executable.exe : fatal error LNK1120: 1 unresolved externals
は次のようになりますそれはない。 DLLのNARは実行可能ファイルのターゲットディレクトリに展開されます。
Windows用NARプラグインを設定する際の助けに感謝します。代わりに、リンカーを正しく実行する方法を示すコマンドラインが便利なので、NAR設定をバックフィルして達成することができます。ありがとう。
私の共有ライブラリモジュール:
Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
public:
int add(int first, int second);
};
#endif
Calculator.cc
#include "Calculator.h"
int Calculator::add(int first, int second) {
return first + second;
}
のpom.xml(抜粋):
<groupId>com.mycompany</groupId>
<artifactId>library</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>nar</packaging>
...
<plugin>
<artifactId>maven-nar-plugin</artifactId>
<version>2.1-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>shared</type>
</library>
</libraries>
</configuration>
</plugin>
マイ実行可能モジュール:
main.cc
#include <iostream>
#include "Calculator.h"
int main() {
Calculator calculator;
std::cout << calculator.add(2, 5) << std::endl;
}
のpom.xml(スニペット)
<groupId>com.mycompany</groupId>
<artifactId>executable</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>nar</packaging>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>library</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>nar</type>
</dependency>
...
<plugin>
<artifactId>maven-nar-plugin</artifactId>
<version>2.1-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>executable</type>
</library>
</libraries>
</configuration>
</plugin>
これは、エクスポートするアイテムをマークする必要があるウィンドウで一般的です。輸出と輸入のバリエーションがあります(静的リンケージでもどちらでもありません)ので、ここで合理的なスタートです。http://stackoverflow.com/questions/4983835/export-dlls-classes-and-functions-and-import-them-into- win32-application –
他のオプションは、/ export:__ function \ _to \ _export__をリンカフラグに追加することです。個人的には素敵な定義を使用し、gccの可視性を利用してリンカが内部シンボルを処理するのにあまり時間を費やさないようにすることさえできます。 http://gcc.gnu.org/wiki/Visibilityを参照してください。 – KitsuneYMG