账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    VS2017,C++,自建的lib中链接了第三方的lib,在主程序中引用自建lib,需要对第三方lib做什么操作吗?
    66
    0

    buliding的输出

    1>..packagesjsoncpp.0.6.0.1buildnativelibx64v110Releasejsoncpp.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86'
    1>F:Visual Studio 2017ProjectsCppDiaryDebugCppDiary.exe : fatal error LNK1120: 13 unresolved externals
    1>Done building project "CppDiary.vcxproj" -- FAILED.

    目录结构

    CppDiary是主程序,引用了另一个项目Lib1;Lib1引用了外部库jsoncpp,是在NuGet里导入的。

    问题

    Lib1 building正常;
    主程序无法build。

    3
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 抱着月亮睡觉 普通会员 1楼

      在VS2017中,如果你的自建lib依赖于第三方的lib,并且在你的主程序中引用了这个自建lib,你需要进行以下操作:

      1. 引用第三方lib:在你的VS2017工程的解决方案中,找到你自建lib的头文件和.cpp文件。在VS的代码编辑器中,右键点击头文件或.cpp文件,选择“Add Reference...”,然后选择“第三方库”。

      命令行窗口中,输入以下命令来添加第三方lib的引用:

      Microsoft.CppSharp.CppLinkTool --cpp_out=. --lib=C:\path\to\your\lib --out=lib\your\lib.dll

      这将把头文件和.cpp文件保存为lib\your\lib.dll文件,并将其添加到解决方案的链接器设置中。在这个例子中,--cpp_out=.表示将头文件编译为可执行文件,--lib=C:\path\to\your\lib表示将第三方lib包含到链接器中,--out=lib\your\lib.dll表示将结果保存为lib\your\lib.dll文件。

      1. 使用lib函数:在你的VS2017项目中,使用lib函数可以更方便地访问第三方lib中的函数或数据。例如,如果你的自建lib包含了一个名为MyLib的类,你可以这样使用lib函数来调用这个类的方法:

      ```cpp #include "MyLib.h"

      int MyLib::myFunction() { // 访问第三方lib中的函数 return 42; }

      int main() { MyLib myLib; // ... return 0; } ```

      在这个例子中,lib\MyLib.h是头文件,lib\MyLib.cpp是.cpp文件。lib函数在lib\MyLib.h中定义,你可以根据你的项目结构和函数名来调用它。

      注意,如果你的自建lib包含静态成员函数,你需要在lib\MyLib.h中声明它们,而不是在lib\MyLib.cpp中。例如:

      ```cpp

      ifndef MYLIB_H

      define MYLIB_H

      class MyLib { public: // 静态成员函数 static int myStaticFunction() { return 42; } };

      endif

      ```

      然后在lib\MyLib.cpp中使用#include "MyLib.h"来导入这个头文件,并在MyLib::myStaticFunction()方法中调用静态成员函数:

      ```cpp

      include "MyLib.h"

      int MyLib::myStaticFunction() { return MyLib::myLib->myStaticFunction(); }

      int main() { MyLib myLib; // ... return 0; } ```

      这将在VS的链接器中生成lib\mylib.lib,并在main函数中调用myStaticFunction方法。如果第三方lib中定义了静态成员函数,那么在main函数中引用这些函数会引发#include错误,因为lib函数需要一个对象才能访问静态成员。因此,你需要在自建lib中声明这些函数,而不是在lib\MyLib.cpp中调用它们。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部