Я пишу статическую библиотеку, и в неё мне надо подключить другие стат. либы (из DirectX SDK). Как их подключить?
Пробовал через #pragma comment(lib, "имя библиотеки"), но когда в другом проекте я подключаю свою библиотеку, при компиляции линковщик ругается на переменные и функции DirectX.
В обычном win32 exe приложении я подключал через свойства проекта>linker>input> и там писал имя библиотек. Но в свойстве стат. либы проекта такого пункта нету. Или через #pragma comment и все норм работало.
Error 1 error LNK2001: unresolved external symbol "private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D" (?m_pD3D@geGraphicsDeviceManager@@0PAUIDirect3D9@@A) geEngineLibrary.lib geEngineProject
Error 2 error LNK2001: unresolved external symbol "private: static struct IDirect3DDevice9 * geGraphicsDeviceManager::m_pGraphicsDevice" (?m_pGraphicsDevice@geGraphicsDeviceManager@@0PAUIDirect3DDevice9@@A) geEngineLibrary.lib geEngineProject
Error 3 fatal error LNK1120: 2 unresolved externals E:\Work\Project\CPP\geEngineProject\Debug\geEngineProject.exe 1 geEngineProject
Библиотека компилится нормально, а вот проект, где я использую свою либу, не хочет
Здравствуйте, Аноним, Вы писали:
А>Я пишу статическую библиотеку, и в неё мне надо подключить другие стат. либы (из DirectX SDK). Как их подключить? А>Пробовал через #pragma comment(lib, "имя библиотеки"), но когда в другом проекте я подключаю свою библиотеку, при компиляции линковщик ругается на переменные и функции DirectX. А>В обычном win32 exe приложении я подключал через свойства проекта>linker>input> и там писал имя библиотек. Но в свойстве стат. либы проекта такого пункта нету. Или через #pragma comment и все норм работало.
А>Error 1 error LNK2001: unresolved external symbol "private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D" (?m_pD3D@geGraphicsDeviceManager@@0PAUIDirect3D9@@A) geEngineLibrary.lib geEngineProject А>Error 2 error LNK2001: unresolved external symbol "private: static struct IDirect3DDevice9 * geGraphicsDeviceManager::m_pGraphicsDevice" (?m_pGraphicsDevice@geGraphicsDeviceManager@@0PAUIDirect3DDevice9@@A) geEngineLibrary.lib geEngineProject А>Error 3 fatal error LNK1120: 2 unresolved externals E:\Work\Project\CPP\geEngineProject\Debug\geEngineProject.exe 1 geEngineProject А>Библиотека компилится нормально, а вот проект, где я использую свою либу, не хочет
не будет такого. окончательная линковка происходит в exe или dll.
Здравствуйте, Ovl, Вы писали:
Ovl>Здравствуйте, Аноним, Вы писали:
А>>Я пишу статическую библиотеку, и в неё мне надо подключить другие стат. либы (из DirectX SDK). Как их подключить? А>>Пробовал через #pragma comment(lib, "имя библиотеки"), но когда в другом проекте я подключаю свою библиотеку, при компиляции линковщик ругается на переменные и функции DirectX. А>>В обычном win32 exe приложении я подключал через свойства проекта>linker>input> и там писал имя библиотек. Но в свойстве стат. либы проекта такого пункта нету. Или через #pragma comment и все норм работало.
А>>Error 1 error LNK2001: unresolved external symbol "private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D" (?m_pD3D@geGraphicsDeviceManager@@0PAUIDirect3D9@@A) geEngineLibrary.lib geEngineProject А>>Error 2 error LNK2001: unresolved external symbol "private: static struct IDirect3DDevice9 * geGraphicsDeviceManager::m_pGraphicsDevice" (?m_pGraphicsDevice@geGraphicsDeviceManager@@0PAUIDirect3DDevice9@@A) geEngineLibrary.lib geEngineProject А>>Error 3 fatal error LNK1120: 2 unresolved externals E:\Work\Project\CPP\geEngineProject\Debug\geEngineProject.exe 1 geEngineProject А>>Библиотека компилится нормально, а вот проект, где я использую свою либу, не хочет
Ovl>не будет такого. окончательная линковка происходит в exe или dll.
Здравствуйте, cencio, Вы писали:
C>Здравствуйте, Аноним, Вы писали: >>>private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D
C>geGraphicsDeviceManager это из твоего движка? либу движка к екзешнику прилинковал? или забыл определись geGraphicsDeviceManager::m_pD3D в самой либе?
Да, geGraphicsDeviceManager из моей либы. Либу к экзешнику прилинковал, в либе есть ещё класс таймера, он в екзешнике работает нормально.
Вот класс geGraphicsDeviceManager:
geGraphicsDeviceManager.h
#ifndef _GRAPHICSDEVICEMANAGER_H
#define _GRAPHICSDEVICEMANAGER_H
Здравствуйте, gena_br, Вы писали:
g> >>>private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D
g> C>geGraphicsDeviceManager это из твоего движка? либу движка к екзешнику прилинковал? или забыл определись geGraphicsDeviceManager::m_pD3D в самой либе?
g> Да, geGraphicsDeviceManager из моей либы. Либу к экзешнику прилинковал, в либе есть ещё класс таймера, он в екзешнике работает нормально.
g> Вот класс geGraphicsDeviceManager:
а где в cpp файле определяются m_pD3D и m_pGraphicsDevice ?
Здравствуйте, cencio, Вы писали:
C>Здравствуйте, gena_br, Вы писали:
g>> >>>private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D
g>> C>geGraphicsDeviceManager это из твоего движка? либу движка к екзешнику прилинковал? или забыл определись geGraphicsDeviceManager::m_pD3D в самой либе?
g>> Да, geGraphicsDeviceManager из моей либы. Либу к экзешнику прилинковал, в либе есть ещё класс таймера, он в екзешнике работает нормально.
g>> Вот класс geGraphicsDeviceManager:
C>а где в cpp файле определяются m_pD3D и m_pGraphicsDevice ?
C>добавь в начало спп файла:
C>IDirect3D9* geGraphicsDeviceManager::m_pD3D; C>IDirect3DDevice9* geGraphicsDeviceManager::m_pGraphicsDevice;
C>как раз их и не может линкер знайти
Большое спасибо! Все заработало!
Так все статические члены надо описывать(в .h и .cpp) в либе?
Здравствуйте, gena_br, Вы писали:
g> g>> >>>private: static struct IDirect3D9 * geGraphicsDeviceManager::m_pD3D
g> g>> C>geGraphicsDeviceManager это из твоего движка? либу движка к екзешнику прилинковал? или забыл определись geGraphicsDeviceManager::m_pD3D в самой либе?
g> g>> Да, geGraphicsDeviceManager из моей либы. Либу к экзешнику прилинковал, в либе есть ещё класс таймера, он в екзешнике работает нормально.
g> g>> Вот класс geGraphicsDeviceManager:
g> C>а где в cpp файле определяются m_pD3D и m_pGraphicsDevice ?
g> C>добавь в начало спп файла:
g> C>IDirect3D9* geGraphicsDeviceManager::m_pD3D; g> C>IDirect3DDevice9* geGraphicsDeviceManager::m_pGraphicsDevice;
g> C>как раз их и не может линкер знайти
g> Большое спасибо! Все заработало! g> Так все статические члены надо описывать(в .h и .cpp) в либе?
либа тут не при чем, если попробуеш длл или екзешку делать вместо нее получиш такую-же ошибку. просто почитай как правильно поределять статические переменные — члены класса.