【问题标题】:How to link libproxy-dev to existing cmake project(C++)?如何将 libproxy-dev 链接到现有的 cmake 项目(C++)?
【发布时间】:2019-12-24 00:06:49
【问题描述】:

我不是 C++ 编码专家。有一项任务我必须使用“libproxy-dev”来自动检测代理。

  1. 在我的 ubuntu 18 系统中安装了“libproxy-dev”: sudo apt-get install libproxy-dev

  2. 导入的 proxy.h:#include

  3. 试图创建 pxProxyFactory 的对象 pxProxyFactory *pf = px_proxy_factory_new();

尝试构建时出现错误 对 `px_proxy_factory_new' 的未定义引用

我的问题:我在如何将 libproxy 链接到 cmake 项目方面做错了吗?我必须添加/更改我的 CMakeLists.txt 吗?

【问题讨论】:

  • "我必须添加/更改我的 CMakeLists.txt 吗?" - 不查看您的CMakeLists.txt 很难说有什么问题...
  • 是的,但一般那里需要什么样的改变?假设我们有新项目,我们唯一想做的就是在这个新项目中创建上述对象。我们的 CMakeLists.txt 应该是什么样子?
  • 您需要链接与您使用的库。在 CMake 中,这是由 target_link_libraries 命令执行的。几乎所有 CMake 教程都描述了如何链接。请注意,libproxy-devpackage 名称,而不是库。库名称是libproxy,在使用该库的指南中一定要注意这一点。

标签: c++ makefile cmake ubuntu-18.04


【解决方案1】:

简答

您错过了为您的项目添加正确的依赖关系。我假设你必须在你的CMakeLists.txt 中添加一些类似这样的命令:

target_link_libraries(your_target_name proxy)

长答案

我用这个内容创建了一个main.cpp

#include <iostream>
#include <proxy.h>

int main(int argc, char **argv)
{
    std::cout << "Hi" << std::endl;

    pxProxyFactory *px = px_proxy_factory_new();

    return 0;
}

然后我用这个内容创建了一个CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(proxy_ex1)

set(MY_SOURCES main.cpp)

add_executable(${PROJECT_NAME} ${MY_SOURCES})

现在运行 cmake -G "Unix Makefiles" . &amp;&amp; make 时,我会收到与您相同的错误消息:main.cpp:(.text+0x38): undefined reference to 'px_proxy_factory_new'

现在在末尾添加target_link_libraries 时,我可以编译我的小程序:

cmake_minimum_required(VERSION 3.10)
project(proxy_ex1)

set(MY_SOURCES main.cpp)

add_executable(${PROJECT_NAME} ${MY_SOURCES})
target_link_libraries(${PROJECT_NAME} proxy)

现在我可以用cmake -G "Unix Makefiles" . &amp;&amp; make编译我的程序了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多