2012-08-06 49 views
2

這是我發現自己無法使用我的普通搜索/堆棧溢出/ youtubing例程的底部的第一個問題。將Lua for Windows安裝到C++程序中遇到問題

我想編譯一個C++環境中的最小Lua程序,以確保我的環境已準備好開發。 Lua語言稍後將用於我的C++遊戲的用戶界面編程。

首先在我的環境中的一些基本信息:

的Windows 7 64位

Visual Studio 2010中

的Lua爲Windows 5.1(我可以從谷歌代碼下載最新的版本)

以下是我正在編譯的代碼:

// UserInt.cpp : Defines the entry point for the console application. 
// 
#pragma comment(lib,"lua5.1.dll") 
#include "stdafx.h" 
#ifndef __LUA_INC_H__ 
#define __LUA_INC_H__ 

extern "C" 
{ 
    #include "lua.h" 
    #include "lauxlib.h" 
    #include "lualib.h" 
} 



int _tmain(int argc, _TCHAR* argv[]) 
{ 
    lua_State * ls = luaL_newstate(); 
    return 0; 
} 

#endif // __LUA_INC_H__ 

這裏是我得到的錯誤:不再使用,所以我嘗試了newstate功能

我看了一下lua_open()(和一些其他功能):

1>UserInt.obj : error LNK2019: unresolved external symbol _luaL_newstate referenced in function _wmain 1>c:\users\deank\documents\visual studio 2010\Projects\UserInt\Debug\UserInt.exe : fatal error LNK1120: 1 unresolved externals

事情我已經試過代替。我犯了同樣的錯誤。這比任何事情都更符合健康檢查。我使用5.1而不是5.2,所以我不認爲這真的很重要。

我也讀過這個線程Cannot link a minimal Lua program,但它似乎並沒有幫助我,因爲我沒有運行與OP相同的環境。我在一個簡單的Windows 7和Visual Studio環境。

頂部附註註釋行是我在另一個線程中看到的。不管有沒有,我都會得到相同的錯誤。

我已經進入了我的visual studio C++目錄區,並將lua include添加到了libraries和lua lib庫中。

因此,看起來我的程序看到.h並看到符號。但由於某些原因,它沒有得到功能的.cpp實現。這就是爲什麼我希望直接包含該.dll將有助於解決問題,但它沒有。

所以,我覺得我已經用盡了所有的選擇來解決這個問題。我希望有人能夠幫助我在這裏前進。 Lua看起來像是一種非常棒的語言,我希望讓自己的環境擺脫困境以求發展。

我希望這只是我的一些愚蠢的錯誤。我相信我儘可能提供了儘可能多的信息。如果你需要更多的細節,我會更新信息,如果我能提供。

EDIT1

試圖在這個Can't build lua a project with lua in VS2010, library issue suspected

的解決方案,也不能工作。

回答

8

您需要有庫(.LIB)文件並將其添加到VS.使用「項目」>「屬性」,然後轉到「鏈接器」>「輸入」,並將完整的.lib文件名添加到「其他依賴項」行。請注意,.LIB與.LIB不同。DLL。

個人而言,我更喜歡通過引用動態鏈接庫將源代碼添加到我的項目中。以下過程可以讓你這樣做。

  1. 下載源代碼(http://www.lua.org/ftp/),解壓縮它。

  2. 在Visual Studio中,選擇「文件」>「新建」>「項目」,然後選擇「Visual C++,Win32,Win32控制檯應用程序」。

  3. 在您的Visual Studio項目中,添加除luac.c之外的所有源代碼。還要從VS創建的文件中刪除main()函數。通常會給出您使用.cpp文件擴展名指定的項目的名稱。您可以從項目中將這個文件全部刪除。

  4. 構建和運行。

這是Lua的控制檯

+1

那麼,你得到我的投票。添加.lib的確有竅門。但我現在更加好奇你的步驟來添加實際的源代碼。這似乎是一個更好的解決方案。我可以將所有的.h和.c(除了luac.c)添加到我的項目中,它應該等於取決於庫的權利?我應該能夠保持我的應用程序完好無損,只需添加一個「Lua」過濾器來隱藏所有這些文件......如果我理解正確。 我只是想能夠執行lua腳本C++ - 端用於UI加載。 另外,如果可以的話,我會加倍努力。沒有足夠的代表這樣做。 – 2012-08-06 22:14:18

+1

是的,幾乎所有你寫的,只是稍作修改。要將Lua嵌入到您的應用程序中,您不會將lua.c(除了已提及的luac.c)添加到您的項目中。 lua.c文件具有它自己的main(),它可以處理控制檯(獲取一行文本並顯示結果),這在您的應用程序中可能不需要。 – PaulPerry 2012-08-06 22:34:07

+0

這正是我想要的。謝謝! 110%滿意答案。 – 2012-08-06 23:10:42