C++ 为Maven NAR项目的链接阶段添加静态库
我已经将一个已经编译的版本打包到NAR Maven项目中。我已经完成了这项工作(一个只包含.lib、.dll和.h文件的项目)。这是我的最终目录结构(C++ 为Maven NAR项目的链接阶段添加静态库,c++,maven,opencv,maven-plugin,C++,Maven,Opencv,Maven Plugin,我已经将一个已经编译的版本打包到NAR Maven项目中。我已经完成了这项工作(一个只包含.lib、.dll和.h文件的项目)。这是我的最终目录结构(lib目录包含.lib和.dll文件,而include目录包含.h文件): pom.xml文件: ... <groupId>org.opencv</groupId> <artifactId>opencv-nar</artifactId> <packaging>nar</packag
lib
目录包含.lib和.dll文件,而include
目录包含.h文件):
pom.xml
文件:
...
<groupId>org.opencv</groupId>
<artifactId>opencv-nar</artifactId>
<packaging>nar</packaging>
<version>2.4.10</version>
<build>
<plugins>
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
<configuration>
<libraries>
<library>
<type>static</type>
</library>
<library>
<type>shared</type>
</library>
</libraries>
</configuration>
</plugin>
</plugins>
</build>
问题发生在链接阶段(在执行mvn compile-X
之后)
我所看到的问题是,OpenCv中的静态lib都没有传递给“link”参数。那么,如何向链接
参数添加一个静态库(或者更好地说,一个目录)
这不是一个回答,而是一个更大的方法。我相信,按照MAVEN NAR的设计方式(甚至MAVEN本身),每个库都必须有自己的项目 因此,考虑到这一点,您需要基于以下两个项目生成一个项目:
- -分为模块的父结构和项目
- -文件结构(我已经使用过)
pom.xml
,它基于,用于:
现在,您必须在项目中添加相应的依赖项pom.xml
:
<dependencies>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-core</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-highgui</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-imgproc</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
</dependencies>
...
[DEBUG] FileSet: Setup scanner in dir E:\PROY\image-lib\dev\1.0\image\target\nar\opencv-nar-2.4.10-x86-Windows-msvc-shared\lib\x86-Windows-msvc\shared with patternSet{ includes: [opencv-nar-2.4.10.lib] excludes: [] }
...
[DEBUG] Execute:Java13CommandLauncher: Executing 'link' with arguments:
'/MANIFEST'
'/NOLOGO'
'/SUBSYSTEM:CONSOLE'
'/INCREMENTAL:NO'
'/OUT:image.exe'
'C:\image\target\nar\obj\x86-Windows-msvc\image-test.obj'
[INFO] image-test.obj : error LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function _main
[ERROR] image-test.obj : error LNK2019: unresolved external symbol "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) referenced in function _main
[INFO] image.exe : fatal error LNK1120: 1 unresolved externals
[ERROR] image.exe : fatal error LNK1120: 1 unresolved externals
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
opencv_core2410.lib
opencv_imgproc2410.lib
opencv_highgui2410.lib
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.opencv</groupId>
<artifactId>parent</artifactId>
<version>2.4.10</version>
<packaging>pom</packaging>
<name>OpenCV :: Parent</name>
<description>OpenCV</description>
<properties>
<nar-plugin.version>3.2.3</nar-plugin.version>
<compiler-name>msvc</compiler-name>
<linker-name>msvc</linker-name>
</properties>
<modules>
<module>core</module>
<module>highgui</module>
<module>imgproc</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<version>${nar-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<cpp>
<name>${compiler-name}</name>
<includes>
<include>**/*.hpp</include>
<include>**/*.h</include>
<include>**/*.cpp</include>
<include>**/*.c</include>
</includes>
</cpp>
<linker>
<name>${linker-name}</name>
</linker>
<libraries>
<library>
<type>static</type>
</library>
<library>
<type>shared</type>
</library>
</libraries>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?xml version = '1.0'?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opencv</groupId>
<artifactId>parent</artifactId>
<version>2.4.10</version>
</parent>
<artifactId>opencv-core</artifactId>
<packaging>nar</packaging>
<name>OpenCV :: Core</name>
<description>OpenCV</description>
<build>
<plugins>
<plugin>
<groupId>com.github.maven-nar</groupId>
<artifactId>nar-maven-plugin</artifactId>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
<dependencies>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-core</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-highgui</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv-imgproc</artifactId>
<version>2.4.10</version>
<type>nar</type>
</dependency>
</dependencies>
> mvn compile
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...