Tworzenie .lib w c++2010

0

Mam projekt w c++ 2010 express który składa się z programu i biblioteki z obsługą /clr czyli w c++/cli.
Klasy w bibliotece są typu exportowego czyli public ref class jakasklasa. Do tej pory w trybie Debug wszystko było fajnie program i biblioteka kompilowały się. Jak przełączyłem w tryb Relase biblioteka się skompilowała ale nie został utworzony plik .lib i oczywiście .exe. Z opisów w sieci wynika że ma być ustawiony parametr Linker->Advanced->Import Library. Oczywiście mam go ustawionego w obu trybach. Po kilku godzinach stwierdziłem że szkoda czasu i przełączyłem się ponownie w tryb Debug i o dziwo tu też mi teraz nie tworzy .lib. Po odzyskaniu z kopii mam to samo. W innym projekcie jest ok.
Jaka może być przyczyna?

0

A jaki masz błąd?

0

------ Rebuild All started: Project: ACNETWrapperBib, Configuration: Debug Win32 ------
Stdafx.cpp
ACNETWrapperBib.cpp
AssemblyInfo.cpp
Generating Code...
.NETFramework,Version=v4.0.AssemblyAttributes.cpp
ACNETWrapperBib.vcxproj -> c:\windows\system32\ACNETWrapperBibD.dll
------ Rebuild All started: Project: ACNETWrapper, Configuration: Debug Win32 ------
stdafx.cpp
connectwrapper.cpp
ACNETWrapper.cpp
ClassWrapper.cpp
Generating Code...
.NETFramework,Version=v4.0.AssemblyAttributes.cpp
LINK : fatal error LNK1104: cannot open file 'ACNETWrapperBibD.lib'
========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

Jak widać nie jest tworzony lib, a jest potrzebny przy linkowaniu exe. Do tej pory były tworzone lib i exp ale po przestawieniu na Relase się zepsuło.
Jak dodałem nową bibliotekę do projektu bo pomyślałem że przeniosę klasy i będzie po problemie to też nie tworzy mi tych lib

0

LINK : fatal error LNK1104: cannot open file 'ACNETWrapperBibD.lib'

masz ta libke w projekcie? masz ja w opcjach linkera?

zobacz ze ona ma D na samym koncu

0

Oczywiście że mam wstawioną libkę w opcjach linkera ACNETWrapper bo jej wymaga.
Ta literka D jest dodana umyślnie i oznacza Debug. Tak ma być.
Chodzi o to że podczas kompilacji ACNETWrapperBib.vcxproj przed linią gdzie tworzony jest dll
ACNETWrapperBib.vcxproj -> c:\windows\system32\ACNETWrapperBibD.dll
powinna być linia w stylu
Creating library D:\Kompilatory\msdev\BIBLIB\ACNetWrapperBibD.lib and object D:\Kompilatory\msdev\BIBLIB\ACNetWrapperBibD.exp
a niestety jej nie ma i nie są tworzone lib i exp

0

Ta literka D jest dodana umyślnie i oznacza Debug. Tak ma być.

No a w Release powinno jej nie być.

Czyli:

ACNETWrapperBibD.dll - debug
ACNETWrapperBib.dll - release

ACNETWrapperBib.vcxproj -> c:\windows\system32\ACNETWrapperBibD.dll

Czy ty kompilujesz do c:\windows\system32? Tego po pierwsze nie powinno się robić, a po drugie pewnie i tak nie działa z powodu braku uprawnień.

0

I dokładnie takie dll powstają w system32 tylko lib nie powstaje.
Na pewno ścieżka do katalogu dla lib jest poprawna bo skopiowałem ją z projektu który tworzy je.
Co ciekawe wszystkie parametry ustawiłem identycznie w obu projektach i dalej w jednym tworzy, a w tym nie tworzy.
Co gorsze jak utworzyłem nowy solution i dodałem bibliotekę i całość skonfigurowałem to też mi nie tworzy lib

0

I dokładnie takie dll powstają w system32

Nie idź tą drogą. Zostaw katalog docelowy domyślny.
Dalsza analiza problemu nie ma sensu przy takim WTF-ie.

0

W tym problem że jak utworzyłem nowy projekt z biblioteką i nic nie grzebałem przy katalogach to też mi nie tworzyło lib więc raczej to nie to

0

Problem się rozwiązał jak dodałem pustą klasę

class __declspec(dllexport) ACDllExport
 {
	public:
 };
0

Ale ten lib ci wcale niepotrzebny jest. W przypadku DLL-ek zarządzanych dodajesz ją jako referencję do projektu.
Dlatego lib nie powstaje, bo i tak nic w nim by nie było.

0

No właśnie. Referencja dodana i tak wołał liba. W tym rzecz że jak dodaję referencję to w komendzie dla linkera pokazuje się właśnie do niego lib więc muszę mieć choćby pusty lib.
Wcześniej program się linkował bo pewnie kiedyś był utworzony i tak został.

1 użytkowników online, w tym zalogowanych: 0, gości: 1