You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Premake5链接DLL项目到主项目时触发LNK1104错误求助

解决Premake5中DLL项目链接主项目的LNK1104错误

我之前也踩过一模一样的坑,Premake5处理DLL依赖的时候很容易出这个问题——你看到的LNK1104找不到.lib的错误,本质是编译器需要DLL对应的导入库,但你的配置要么没生成这个库,要么没让主项目定位到它。

一步步拆解修复:

第一步:确认DLL项目的kind设置正确

你的LibProject必须明确设置为kind "SharedLib",这是核心!如果之前写成了kind "StaticLib",生成的是静态库的.lib,和DLL需要的导入库完全不是一回事。修改后的项目配置大概是这样:

project "LibProject"
    kind "SharedLib"  -- 必须是SharedLib,才会生成DLL+对应的导入.lib
    language "C++"
    targetdir "bin/%{cfg.buildcfg}"  -- 统一输出目录,避免路径混乱
    objdir "obj/%{cfg.buildcfg}"

    files { "src/lib/**.h", "src/lib/**.cpp" }
    defines { "LIBPROJECT_EXPORTS" }  -- 这个宏用来控制符号导出,后面会详细说

第二步:把两个项目放到同一个工作区

Premake需要通过工作区管理项目依赖顺序,确保编译主项目时,LibProject的导入库已经生成。把你的配置用workspace包裹起来:

workspace "MyAppWorkspace"
    configurations { "Debug", "Release" }
    platforms { "x64" }  -- 保持平台一致,避免32/64位不兼容导致的链接问题

-- 这里放LibProject的配置
-- 接着放MainProject的配置

第三步:修正主项目的链接配置

你写的links { "LibProject" }本身没问题,但得确保主项目能找到导入库的位置,以及LibProject的头文件。修改主项目配置:

project "MainProject"
    kind "ConsoleApp"  -- 或者你需要的其他项目类型,比如WindowedApp
    language "C++"
    targetdir "bin/%{cfg.buildcfg}"  -- 和LibProject用同一个输出目录,省得额外配置libdirs
    objdir "obj/%{cfg.buildcfg}"

    files { "src/main/**.h", "src/main/**.cpp" }

    links { "LibProject" }  -- 链接DLL的导入库
    includedirs { "src/lib" }  -- 让主项目能找到LibProject的头文件
    -- 如果输出目录不一样,就加上这行:libdirs { "bin/%{cfg.buildcfg}" }

第四步:确保DLL符号正确导出

这一步很容易忽略——如果你的DLL里的函数没有被标记为导出,那导入.lib里不会有对应的符号,就算找到.lib也会链接失败。在LibProject的公共头文件里加一个导出宏:

// libproject.h
#ifdef LIBPROJECT_EXPORTS
#define LIBPROJECT_API __declspec(dllexport)
#else
#define LIBPROJECT_API __declspec(dllimport)
#endif

// 用这个宏标记你要导出的函数/类
LIBPROJECT_API void MyLibFunction();

当编译LibProject时,因为我们设置了defines { "LIBPROJECT_EXPORTS" },LIBPROJECT_API会变成__declspec(dllexport),把函数导出到DLL;主项目编译时没有这个宏,会自动变成__declspec(dllimport),告诉编译器这个函数来自外部DLL。

最后检查VS的依赖顺序

打开生成的VS解决方案,右键点击工作区 -> 项目依赖,确认MainProject的依赖列表里有LibProject。这样VS会先编译LibProject生成导入库,再编译主项目,避免编译顺序导致的文件找不到问题。

按照这几步改完,你的LNK1104错误应该就能解决了。

内容的提问来源于stack exchange,提问作者Toby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:11