micro133
2006-09-13 09:38:57 UTC
mam taki problem i nie potrafie sobie z nim poradzić, jest to projekt DLL'ki
która coś tam sobie robi i ona juz działa.
Ponieważ nigdy nie rozumiałem MFC, i być może sie myle ale pomyślałem że
lepiej sie nauczyć czegoś innego. mój wybór padł na FLTK bo pare dni temu o
nim wyczytałem na tej grupie.
Wygenerowałem FLUIDem klase UserInterface i w konstruktorze pewnej klasy
wstawiłem taką linie:
*********
UserInterface MyUI(100,100,300,300);
*********
chodzi mi o to że jeśli ten konsturktor zostanie wywołany z pewnym
parametrem, klasa uruchomi się w trybie umożliwiającym podglądanie tego co
jest robione za pomocą DLL'ki, a także za pomocą okna będzie można wykonać
pewne dodatkowe działania normalnie nie potrzebne.
Niestety po dodaniu powyższej linii linker mówi coś takiego:
------ Build started: Project: HBTestLibrary2, Configuration: Release
Win32 ------
Compiling...
HBTest.cpp
WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)
Linking...
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnGetSystemMetrics already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromWindow already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromRect already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromPoint already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnGetMonitorInfo already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayMonitors already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayDevices already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_fMultiMonInitDone already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_fMultimonPlatformNT already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _IsPlatformNT already defined in
fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _InitMultipleMonitorStubs already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@4 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@12 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already defined
in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already defined
in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@16 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@16 already
defined in fltkd.lib(screen_xywh.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _free already defined in
libcmt.lib(free.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _realloc already defined in
libcmt.lib(realloc.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _malloc already defined in
libcmt.lib(malloc.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _tolower already defined in
libcmt.lib(tolower.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isupper already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isalpha already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in
libcmt.lib(strdup.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _memmove already defined in
libcmt.lib(memmove.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strncpy_s already defined in
libcmt.lib(strncpy_s.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _exit already defined in
libcmt.lib(crt0dat.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __stricmp already defined in
libcmt.lib(stricmp.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _getenv already defined in
libcmt.lib(getenv.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strrchr already defined in
libcmt.lib(strrchr.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isspace already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isdigit already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strchr already defined in
libcmt.lib(strchr.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strtol already defined in
libcmt.lib(strtol.obj)
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall
type_info::type_info(class type_info const &)" (??0type_info@@***@ABV0@@Z)
already defined in libcmt.lib(typinfo.obj)
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info &
__thiscall type_info::operator=(class type_info const &)"
(??4type_info@@***@ABV0@@Z) already defined in libcmt.lib(typinfo.obj)
Creating library C:\Documents and Settings\micro\Moje dokumenty\Visual
Studio 2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.lib and object
C:\Documents and Settings\micro\Moje dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.exp
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other
libs; use /NODEFAULTLIB:library
HBTest.obj : error LNK2001: unresolved external symbol "public: __thiscall
UserInterface::UserInterface(int,int,int,int,char const *)"
(??0UserInterface@@***@HHHHPBD@Z)
C:\Documents and Settings\micro\Moje dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.dll : fatal error
LNK1120: 1 unresolved externals
Build log was saved at "file://c:\Documents and Settings\micro\Moje
dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\HBTestLibrary2\Release\BuildLog.htm"
HBTestLibrary2 - 39 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
No i lipa. podam teraz pewne informacje które wydają mi się powiązane z tym
problemem:
1. używam stdafx. Trochę mi trudno z niego teraz zrezygnować, choć wiem że w
przyszłości nie będę go już używał.
2. program jest oczywiście pisany w zwykłym c++ (bez zmiennych
zarządzałnych).
3. Gdy tworzyłem ten projekt pamiętam że zaznaczyłem "use of MFC", z dwóch
powodów, pierwszy bo myślałem wtedy że to MFC będzie fajne, a drugi to taki
że w projekcie używam klasy do obsługi portu szeregowego który jak się dziś
przekonałem wymaga/wspiera MFC. mogę użyć innej klasy, bo już taką mam,
która nie wymaga MFC.
4. kurde teraz bym zrobił pusty projekt DLL i lepiej bym na tym wyszedł,
próbowałem ten kod przenieść na taki, ale 800 błędów na wstępie. chyba przez
brak stdafx.h. To co rzuciło mi się na wstępie na oczy spośród tych 800
błędów to brak kilku typów (TCHAR, BYTE), brak definicji CRITICAL_SECTION
którego z koleji nie moge nigdzie znaleźć, i wiele innych. Jeśli to jedyna
możliwość no to jakoś to może przeniosę. Ale może problem jest tak naprawde
łatwy do rozwiązania i coś mi zasugerujecie ?...
pozdrawiam
gh.
która coś tam sobie robi i ona juz działa.
Ponieważ nigdy nie rozumiałem MFC, i być może sie myle ale pomyślałem że
lepiej sie nauczyć czegoś innego. mój wybór padł na FLTK bo pare dni temu o
nim wyczytałem na tej grupie.
Wygenerowałem FLUIDem klase UserInterface i w konstruktorze pewnej klasy
wstawiłem taką linie:
*********
UserInterface MyUI(100,100,300,300);
*********
chodzi mi o to że jeśli ten konsturktor zostanie wywołany z pewnym
parametrem, klasa uruchomi się w trybie umożliwiającym podglądanie tego co
jest robione za pomocą DLL'ki, a także za pomocą okna będzie można wykonać
pewne dodatkowe działania normalnie nie potrzebne.
Niestety po dodaniu powyższej linii linker mówi coś takiego:
------ Build started: Project: HBTestLibrary2, Configuration: Release
Win32 ------
Compiling...
HBTest.cpp
WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)
Linking...
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnGetSystemMetrics already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromWindow already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromRect already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnMonitorFromPoint already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnGetMonitorInfo already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayMonitors already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_pfnEnumDisplayDevices already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_fMultiMonInitDone already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _g_fMultimonPlatformNT already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _IsPlatformNT already defined in
fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: _InitMultipleMonitorStubs already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@4 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@12 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already defined
in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@8 already defined
in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@16 already
defined in fltkd.lib(screen_xywh.obj)
uafxcw.lib(wincore.obj) : error LNK2005: ***@16 already
defined in fltkd.lib(screen_xywh.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _free already defined in
libcmt.lib(free.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _realloc already defined in
libcmt.lib(realloc.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _malloc already defined in
libcmt.lib(malloc.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _tolower already defined in
libcmt.lib(tolower.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isupper already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isalpha already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in
libcmt.lib(strdup.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _memmove already defined in
libcmt.lib(memmove.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strncpy_s already defined in
libcmt.lib(strncpy_s.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _exit already defined in
libcmt.lib(crt0dat.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __stricmp already defined in
libcmt.lib(stricmp.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _getenv already defined in
libcmt.lib(getenv.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strrchr already defined in
libcmt.lib(strrchr.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isspace already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _isdigit already defined in
libcmt.lib(_ctype.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strchr already defined in
libcmt.lib(strchr.obj)
MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: _strtol already defined in
libcmt.lib(strtol.obj)
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall
type_info::type_info(class type_info const &)" (??0type_info@@***@ABV0@@Z)
already defined in libcmt.lib(typinfo.obj)
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info &
__thiscall type_info::operator=(class type_info const &)"
(??4type_info@@***@ABV0@@Z) already defined in libcmt.lib(typinfo.obj)
Creating library C:\Documents and Settings\micro\Moje dokumenty\Visual
Studio 2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.lib and object
C:\Documents and Settings\micro\Moje dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.exp
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other
libs; use /NODEFAULTLIB:library
HBTest.obj : error LNK2001: unresolved external symbol "public: __thiscall
UserInterface::UserInterface(int,int,int,int,char const *)"
(??0UserInterface@@***@HHHHPBD@Z)
C:\Documents and Settings\micro\Moje dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\Release\HBTestLibrary2.dll : fatal error
LNK1120: 1 unresolved externals
Build log was saved at "file://c:\Documents and Settings\micro\Moje
dokumenty\Visual Studio
2005\Projects\HBTestLibrary2\HBTestLibrary2\Release\BuildLog.htm"
HBTestLibrary2 - 39 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
No i lipa. podam teraz pewne informacje które wydają mi się powiązane z tym
problemem:
1. używam stdafx. Trochę mi trudno z niego teraz zrezygnować, choć wiem że w
przyszłości nie będę go już używał.
2. program jest oczywiście pisany w zwykłym c++ (bez zmiennych
zarządzałnych).
3. Gdy tworzyłem ten projekt pamiętam że zaznaczyłem "use of MFC", z dwóch
powodów, pierwszy bo myślałem wtedy że to MFC będzie fajne, a drugi to taki
że w projekcie używam klasy do obsługi portu szeregowego który jak się dziś
przekonałem wymaga/wspiera MFC. mogę użyć innej klasy, bo już taką mam,
która nie wymaga MFC.
4. kurde teraz bym zrobił pusty projekt DLL i lepiej bym na tym wyszedł,
próbowałem ten kod przenieść na taki, ale 800 błędów na wstępie. chyba przez
brak stdafx.h. To co rzuciło mi się na wstępie na oczy spośród tych 800
błędów to brak kilku typów (TCHAR, BYTE), brak definicji CRITICAL_SECTION
którego z koleji nie moge nigdzie znaleźć, i wiele innych. Jeśli to jedyna
możliwość no to jakoś to może przeniosę. Ale może problem jest tak naprawde
łatwy do rozwiązania i coś mi zasugerujecie ?...
pozdrawiam
gh.