2011-11-25 15 views
5

Actualmente estoy tratando de aprender a usar premake 4 para aplicarlo a OpenGL sdk. Actualmente estoy tratando de crear una solución de Visual Studio 2010 que construye 2 proyectos, uno es una biblioteca estática, el otro contiene un único archivo fuente principal, con el método principal.Crear una biblioteca estática y vincularla con premake

Este proyecto es extremadamente simple, y es únicamente con el propósito de aprender premake. En el proyecto de biblioteca estática, llamado Test, tengo 2 archivos, Test.h y Test.cpp. Test.h contiene el prototipo del método print(). print() simplemente imprime una línea en la consola. Usando premake, vinculé la biblioteca estática al proyecto Main, y en main.cpp incluí el archivo Test.h. Mi problema es el siguiente: en VS2010 consigo este error cuando se intenta generar:

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

Aquí está mi código en los 4 archivos, el 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" 

    } 

Test.cpp:

#include <iostream> 

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

Test.h:

void print(); 

Main.c pp:

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

Si se preguntan por qué hay una getch() allí, en mi equipo la consola se cierra inmediatamente una vez que alcanza devolver 0, así que utilizo getch() para combatir esa cuestión, lo que obliga a la ventana esperar hasta que el usuario haya presionado otra tecla. Cualquier consejo sobre este tema sería maravilloso, porque simplemente no estoy seguro de cuál es el problema. Si es algo simple, por favor no me casches, tengo muy poca experiencia con premake y bibliotecas estáticas, y es por eso que estoy tratando de aprenderlas.

Respuesta

9
links {"Test"} 

Lua no es Python. El espacio en blanco es irrelevante para Lua, al igual que el espacio en blanco no importa para C++. Por lo tanto, su declaración links solo se aplica a la configuración "Release". Si desea que se aplique al proyecto como un todo, debe ir antes de la instrucción configuration, al igual que su kind, files y otros comandos.

Premake4 funciona de esta forma para que pueda tener ciertas bibliotecas que solo se usan en una compilación "Release" (o Debug o lo que sea). De hecho, puede poner casi cualquier comandoproject bajo un configuration. De modo que puede tener archivos específicos que solo se usan en una compilación de depuración, o lo que sea.

+0

Ese fue el problema, sin embargo, ahora me sale un problema cuando intento ejecutar la compilación, una ventana emergente que dice: No se puede iniciar el programa: 'ubicación_de_archivo \. \ Test.lib' El archivo especificado no se reconoce o no admite formato binario ¿Alguna ayuda con esto? PD. Lo que cambié fue mover Enlaces {"Prueba"} a la derecha debajo de Idioma. – user1032369

+0

@ user1032369: Eso es porque estás tratando de ejecutar la * biblioteca *, no el ejecutable. Cambiar el "Proyecto de inicio" actual. –

+0

Así que solo puedo ejecutar programas premake haciendo clic en el ejecutable, no puedo ejecutarlo desde VS? – user1032369

Cuestiones relacionadas