我正在尝试使用 Maven NAR 插件构建一个非常简单的 C++ 程序。我已经设置了一个 Maven 模块来构建共享库,另一个用于在库中链接并构建使用它的可执行文件。在 Mac 上构建效果很好,我可以运行该程序。不幸的是,使用 MS Visual C++(免费版)在 Windows (XP) 上构建失败并出现链接器错误。两台机器(除了操作系统和编译器)配置的唯一区别是我在 Windows 机器上使用 Maven 构建之前运行 vcvars32.bat。这是我得到的错误:
main.obj : error LNK2019: unresolved external symbol "public: int __thiscall
Calculator::add(int,int)" (?add@Calculator@@QAEHHH@Z) referenced in function
_main executable.exe : fatal error LNK1120: 1 unresolved externals
NAR 插件输出的链接器命令如下所示:
link /MANIFEST /NOLOGO /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /OUT:executable.exe
C:\dev\Projects\trunk\executable\target\nar\obj\x86-Windows-msvc\main.obj
我希望它应该列出由我的共享库模块生成的 DLL,但它不存在。DLL 的 NAR 在可执行文件的目标目录中解压缩,应该是这样。
为 Windows 配置 NAR 插件的任何帮助将不胜感激。或者,显示如何正确执行链接器的命令行会很有用,因此我可以回填 NAR 配置来实现它。谢谢。
我的共享库模块:
计算器.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
class Calculator {
public:
int add(int first, int second);
};
#endif
计算器.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>
我的可执行模块:
主文件
#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>