首页 > 解决方案 > 使用 ninja 生成可执行文件的问题。使用带有柯南的软件包

问题描述

我有下一个问题,当我打算生成我的应用程序的可执行文件时,系统会显示下一条消息:

undefined reference to `sum'
undefined reference to `rest'
undefined reference to `multi'

对于 div,应用程序向我显示了错误的结果。

我可以创建包,也可以使用 Cmake 编译,系统不会显示错误,但是当我打算生成可执行文件时,系统会显示这些消息,我不知道为什么,所以我向您展示我的消费者文件,如 CMakeLists 和 conanfile。我希望你能帮助我!

CMakeLists。文本

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Example C)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

SET(MyExample_SRC 
"main.c")

add_executable(example ${MyExample_SRC})
target_link_libraries(example ${CONAN_LIBS})

柯南文件.txt

[requires]
Exa/0.1@edwin/testing

[generators]
cmake

这是我用来创建包的 conanfile.py:

from conans import ConanFile, CMake, tools


class ExaConan(ConanFile):
   name = "Exa"
   version = "0.1"
   settings = "os", "compiler", "build_type", "arch"
   generators = "cmake"

    def source(self):
        #self.run("CD C:/projects/connan-example/pkg")
        pass

    def build(self):
        self.run("CD C:/projects/connan-example/pkg/ & Compile.bat")
        #cmake = CMake(self)
        #make.configure(source_folder="connan-example")
        #cmake.build()

    def package(self):
        self.copy("MultiDiv.obj", dst="objects", keep_path=False)
        self.copy("SumRest.c", dst="source", keep_path=False)
        #self.copy("*.lib", dst="lib", keep_path=False)


    def package_info(self):
        #self.c_info.libs = ["example"]
        pass

Compile.bat 只是为 MultDiv 创建文件 .obj,就像文件显示的那样,我正在打包 MultiDiv 和 SumRest。当我使用 gcc 命令编译并生成可执行文件时,我可以成功

标签: ccmakeninjaconan

解决方案


您缺少一些信息:

  • ${CONAN_LIBS}您在 CMakeLists.txt 中看到的变量从依赖项方法package_info()中获取其值。由于您的package_info()方法是空的,它不会将信息传递给消费者,他们不需要如何与他们联系。
  • 您没有使用正确的库。您需要创建一个实际的静态“.lib”、“.a”库或共享库,并将其打包到"lib"目录中。或者如果不将它(在package()方法中)打包到该目录,则self.cpp_info.libdirs=["yourlibdir"]相应地定义
  • 即使可以在 CMake 中使用 OBJECT“库”,它们也不能在 CMake 中完全用作目标(我认为它已在最后一个 CMake 3.12 中添加)

推荐阅读