C++ 为Maven NAR项目的链接阶段添加静态库

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

我已经将一个已经编译的版本打包到NAR Maven项目中。我已经完成了这项工作(一个只包含.lib、.dll和.h文件的项目)。这是我的最终目录结构(
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本身),每个库都必须有自己的项目

因此,考虑到这一点,您需要基于以下两个项目生成一个项目:

  • -分为模块的父结构和项目
  • -文件结构(我已经使用过)
因此,对于我的OpenCV项目,这是父级
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] ------------------------------------------------------------------------
...