【问题标题】:Can I link an external lib into a header-only visual studio project for use in other solutions?我可以将外部库链接到仅包含标头的 Visual Studio 项目以用于其他解决方案吗?
【发布时间】:2014-04-15 11:54:14
【问题描述】:

我一直在使用 Boost 的 ASIO 库进行网络和套接字通信。现在我已经到了开发周期的一个阶段,我想清理一些东西并让它们更加模块化。我的第一个想法是我会为网络通信部分使用一个单独的项目(基本上排除了与 Boost 相关的东西),并在两个不同的 Visual Studio 解决方案中使用一个 Visual Studio 项目。比如:

Client.sln
->  Client.vcxproj
->  Networking.vcxproj

Server.sln
->  Server.vcxproj
->  Networking.vcxproj

我试图这样做,但我的 Networking.vcxproj 已经变成了一个只有标头的项目,因为我只创建模板类。我最理想的做法是将对 boost 预编译库的引用仅放在 Networking.vcxproj 中,并链接到 Networking.vcxproj 的输出。但是,如果我理解正确,没有什么可以链接的,因为我的 Networking.vcxproj 没有 .cpp 文件。

是否有任何方法可以链接到我的 Networking 项目和 boost ASIO 库,而无需在所有项目中指定所有额外的库依赖项?即有没有办法以某种方式创建项目设置,这样我就不必在每次创建使用 Networking.vcxproj 项目的新应用程序时复制 boost 库依赖项?

【问题讨论】:

    标签: c++ visual-studio visual-studio-2012 boost linker


    【解决方案1】:

    试着放

    #pragma comment(lib, "libname.lib")
    

    在您的网络头文件之一中。这应该强制包含该标头的任何项目链接到指定的库(名称为“libname”)。

    pragma comment

    【讨论】:

    • 我试过了,但它根本没有任何明显的影响。根据 Networking.vcxproj 的配置,我要么得到一个链接错误 LNK1104,抱怨它无法链接到 Network.lib,要么我只是得到一个链接错误,抱怨它找不到 libboost_system-vc110-mt-gd-1_55。库。 Visual Studio 是不是太笨了,无法查看依赖项目的依赖关系?
    • 你应该把#pragma指令不要放在网络项目中,只放在其他项目中,你也应该链接到库,比如只在.exe项目中而不是.lib项目中的boost(在项目依赖项中)。另请记住,“libname.lib”应包含从正在构建的 .vcxproj 目录开始的 lib 路径(或绝对路径)
    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多