预制中的库问题

时间:2018-08-03 12:29:13

标签: premake

在premake4脚本中使用库时,我遇到了某些问题。

1)在Windows 10上使用premake4脚本创建共享库(.dll)时,它会很好地创建dll,但也会创建小型(2K)静态库。

就我而言,我正在使用premake4脚本创建一个名为MathLib.dll的共享库。它可以正确执行此操作,但是它还创建了一个名为libMathLib.a的文件,大小为2K。 (它可能是空的。)

我不明白为什么需要用premake4生成的Makefile来创建libMathLib.a,而实际上目的是创建一个.dll文件。我认为这可能是premake4的错误,我在github上的premake4问题跟踪器上提出了这个问题。

premake4 lua脚本如下:

-- Dir : Files > C > SW > Applications > Samples >
--      premakeSamples > premake-sharedlib-create

--#!lua

-- A solution contains projects,
-- and defines the available configurations
solution "MathLib"
   configurations { "Debug", "Release" }

   -- A project defines one build target
   project "MathLib"
      kind "SharedLib"
      language "C++"
      files { "**.h", "**.cpp" }
      includedirs {"../../../ProgramLibraries/Headers/"}
      -- Create target library in Files > C > SW > 
      -- Applications > ProgramLibraries
      targetdir "../../../ProgramLibraries/"

      configuration "Debug"
         defines { "DEBUG" }
         flags { "Symbols" }

      configuration "Release"
         defines { "NDEBUG" }
         flags { "Optimize" }


-- Register the "runmakefile" action.
newaction
{
   trigger = "runmakefile",
   description = "run the generated makefile to create the executable using the default ('debug' config)",
   execute = function()
     os.execute("make")
   end
}


-- Register the "runmakefilerelease" action.
newaction
{
   trigger = "runmakefilerelease",
   description = "run the generated makefile to create the executable using the 'release' config)",
   execute = function()
     os.execute("make config=release")
   end
}


2)上面的问题比听起来更严重。假设我已经使用单独的premake4脚本在Libraries目录中创建了一个名为libMathLib.a的真正静态库。随后,如果我还在与静态库相同的目录中创建一个名为MathLib.dll的共享库,则将创建一个虚拟静态库(可能为空)并替换早期的正版静态库。


3)-编辑-:我已经报告了这一点(使用静态库)是一个问题,但是现在它已经开始工作。我不知道原因,但是据我所知,唯一的区别是我已经关闭并重新启动了PC(因此重新启动了Windows 10上的MSYS会话)。因此,我要删除这一点。


如何解决以上两个问题?

1 个答案:

答案 0 :(得分:1)

那就是import library。您可以使用Premake的NoImportLib标志将其关闭。

flags { "NoImportLib" }