gpt4 book ai didi

c++ - 创建静态库并使用 premake 链接到它

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:12 32 4
gpt4 key购买 nike

我目前正在尝试学习如何使用 premake 4 以便将其应用于 OpenGL sdk .我目前正在尝试制作一个构建 2 个项目的 Visual Studio 2010 解决方案,一个是静态库,另一个包含一个主源文件,使用 main 方法。

本项目非常简单,仅供学习premake之用。在名为 Test 的静态库项目中,我有 2 个文件,Test.h 和 Test.cpp。 Test.h 包含方法 print() 的原型(prototype)。 print() 只是向控制台打印一行。使用 premake,我将静态库链接到 Main 项目,并在 main.cpp 中包含了 Test.h 文件。我的问题是:在 VS2010 中,当我尝试构建时出现此错误:

1>main.obj : error LNK2019: unresolved external symbol "void __cdecl print(void)" (? print@@YAXXZ) referenced in function _main  1>.\Main.exe : fatal error LNK1120: 1 unresolved externals

Here is my code in the 4 files, the premake4.lua:

solution "HelloWorld"
configurations {"Debug", "Release"}
project "Main"
kind "ConsoleApp"
language "C++"
files{
"main.cpp"

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

configuration "Release"
defines { "NDEBUG" }
flags { "Optimize" }
links {"Test"}
project "Test"
kind "StaticLib"
language "C++"
files{
"test.h",
"test.cpp"

}

测试.cpp:

#include <iostream>

void print(){
std::cout << "HELLO" << std::endl;
}

测试.h:

void print();

主要.cpp:

#include <conio.h>
#include "test.h"
int main(){
print();
getch();
return 0;
}

如果您想知道为什么那里有 getch(),在我的计算机上,控制台会在到达 return 0 时立即关闭,所以我使用 getch() 来解决这个问题,这会强制窗口等待,直到用户按下另一个键。关于这个问题的任何建议都会很棒,因为我只是不确定问题出在哪里。如果它很简单,请不要阉割我,我对 premake 和静态库的经验很少,这就是我尝试学习它们的原因。

最佳答案

links {"Test"}

Lua 不是 Python。空格与 Lua 无关,就像空格与 C++ 无关一样。因此,您的 links 语句仅适用于 "Release" 配置。如果你想让它作为一个整体应用到项目中,它需要放在configuration语句之前,就像你的kind, files,和其他命令。

Premake4 以这种方式工作,因此您可以拥有某些仅在 "Release" 构建(或 Debug 或其他)中使用的库。实际上,您几乎可以将任何 project 命令放在configuration 下。因此,您可以拥有仅在调试构建或其他任何情况下使用的特定文件。

关于c++ - 创建静态库并使用 premake 链接到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272102/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com