Tam Sürümünü Görmek İçin : Cgicc derleme hataları
visual studio 2003 te cgicc yi kullanayım dedim yannız derleyici daha en başta beni zora sokuyo...
#include <cgicc/Cgicc.h>
#include <vector>
#include <new>
#include <string>
using namespace cgicc;
int main(int argc, char **argv)
{
Cgicc cgi;
return 0;
}
daha boyle en basit kodda birsürü hatayı dizdiriyo...
sonra references a bu cgicc/win altındaki projeleri ekledim. bu sefer hata sayısı baya bi kısalıyo
Linking...
foo.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall cgicc::Cgicc::~Cgicc(void)" (__imp_??1Cgicc@cgicc@@QAE@XZ) referenced in function _main
foo.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall cgicc::Cgicc::Cgicc(unsigned int (__cdecl*)(void *,unsigned int))" (__imp_??0Cgicc@cgicc@@QAE@P6AIPAXI@Z@Z) referenced in function _main
Debug/foo.exe : fatal error LNK1120: 2 unresolved externals
gibi hatalar veriyo.. yannız sonra dosyada en ufak bir degisiklik yapınca tekrar o uzun hataları gösteriyo...
bi de ben cgicc yi kullanabilmek için visual c++ 2003 e bunun bir console application olduğunu mu söylicem... çünkü ben hep öyle denedim... başka alternatif te yok gibi (int main..)..
yannız şu da var.. eğer ben bunu bir console application olarak başlatırsam bu exe uzantılı bir dosya oluşturmayacak mı ... linux u bilmiyorum ama BeOS üzerrinde exe uzantılı dosya çalışmıyo... yani ben bunu BeOS un xitami sunucusunda kullanamam anlamına mı geliyo... uzantısı exe dışında farklı bişi olmalı o zaman... e console application yaptığımda da exe uzantılı dosya oluşturuyo... ne yapmalıyım... ne yapmamalıyım... ayrıntılı bir şekilde annatırsanız sevinirim...
birde bu sunucu tarafında xsl dosyalarını nasıl html ye dönustururum. bunu cgicc ile yapabilirmiyim (herhangi bir library mevcut mu)... ya da xml dosyalarıyla nasıl baglantı kurabilirim.. c++ la ulaşabilecegim herhangi bir parser mevcut mu... bu xml, xsl olayını c++ ta nasıl cozerim aydınlatırsanız sevinirim...
hataların nedeni bir kütüphanenin bağlanmamış olması.Kütüphanenin dökümanlarında install kısmında vardır açıklama.
(referans diyor bunlara VC++)
consol ya da değil ,her durumda, derlemenin sonucu ya .exe dosyası olur, ya da dll ..
ama managed C++ kullanmışsan o .exe yi ,
.NET in kurulu olmadığı makinada çalıştıramazsın.
bu arada , visualStudio derleyicisini BeOS için nasıl kullanabiliyorsun ?
( ya da linux ) .. :confused:
Euclides
19/05/2005, 15:33
using namespace std;
using namespace cgicc;
2...
.net'in kurulu olMAdığı makinalarda tabii ki çalıştırabilirsin..
3...
Hangi ortamda olursa olsun console olmalı çünkü aslında bu tip uygulamalar stdin ve stdout ile çalışırlar ;)
Euclides arkadasım dediğini yaptım.. zaten iki tane .lib dosyası var... ikisinin de içinde GNU lesser general public license ile ilgili yazı var... yani bu .lib dosyaları binary değil.. ve bana yine aynı hataları dizdiriyo...
.net muhabbetini kim çıkardı bilmiyorum.. aynı zamanda projeyi win32 console application olarak başlattım (.net console application olarak değil).. mr1yh1 arkadasım ben visual studio yu win altında kullanıyorum.. zaten BeOS sürümünün de olması saçma (Microsoft un başında linux gibi bi bela varken niye birtane daha sarsın ki)... sadece BeOS .exe uzantılı dosyaları çalıştırmıyo... BeOS sistemimin üzerinde kurulu xitami var.. ben onun üzerinde çalıştırmak istiyorum... acaba console application olarak mı başlatmam gerektiğini merak etmiştim...
Readme.WIN dosyasının içeriği
-------------------------------------------------------------------------------------------
README for using GNU cgicc on Windows
=====================================
The win/ subdirectory contains Microsoft Visual C++ 6.0 workspace and
project files for the cgicc library and test and example applications.
A note about C4251
==================
Please note that when compiling the sample applications, you will
receive several warnings (C4251: 'identifier' : class 'type' needs to
have dll-interface to be used by clients of class 'type2'). This
occurs because cgicc's classes and functions are exported using the
__declspec method. Several of cgicc's functions return the Standard
Template Library class 'string', which is exported in a .DEF file. At
compile time, the compiler cannot know whether the STL class string is
exported, since cgicc does not import the .DEF file.
These warnings may be safely ignored.
-------------------------------------------------------------------------------------------
dediği klasördeki örneklere bakmak istiyorum.. ama Visual C++ 2003 aşagıdaki hatayı veriyo...
The project 'cgicc.dsp' must be converted to the current Visual C++ project format. After it has been converted, you will not be able to edit this project in previous versions of Visual Studio.
Convert and open this project?
convert desemde demesemde sonrasında, the project cannot be loaded.. diyo
hayır dedim sonra acaba haggard dinnemediğim için mi derlemiyo bu projeyi .. sonra bende açtım winamp ı ama yine derlemiyo... demekki haggard dinlememle alakası yok 8)...
.NET den bahsetme nedenim, elindeki derleyici managed C++ derleyebiliyor onun uzantısı da exe oluyor.
ilk mesajındaki hatalar bir kütüphanenin bulunamayışından kaynaklanıyor.
bu ya statik kütüphanedir lib dosyasının projeye eklenmesi lazım.
yada dinamik bağlıdır lib'in eklenmesi ve dll nin path üzerinde olması gerekir .
( winapi kullanılıyorsa lib e gerek yok )
Euclides
19/05/2005, 19:36
#pragma comment(lib,"Beniekle.lib")
komutu ile linkere lib ekletebilirsin. sanırım ozaman o hatayı vermez.. ???
mesela
#pragma comment(lib,"commctrl.lib")
gibi...
cgicc hangisi kullanıyorsa onu bulmak lazım ...
işte o yok... Euclides kardeşim dediğin gibi copying.lib in ascii olduğun farketmeyip dediğin gibi yaptım...
#pragma comment(lib, "copying.lib")
sonra bi baktım visual studio bunla alakalı bi hata veriyo.. hatanın üzerini tıkladığımda bir de ne göreyim... karşımda GNU lisansı ile ilgili bi yazı... bu lib uzantılı dosyada sadece gnu lisansından bahsediyo... (baska bi klasorde de copying.lib diye bi dosya war. oda yaklaşık aynı.. oda ascii o da gnu lisansından bahsediyo)
ya daha önce bu cgicc yi kullanmış olan yok mu...
visualStudioExpress beta2 kullanıyorum.
indirip derledim,
win klasöründeki projeleri derlemek lazım(batch build yap ve clean yapma).
sonra debug ve release klasorlerinin içine bak
orada bir dll bir de lib dosyası olacak adları:
cgicc.dll ve cgicc.lib
(copying.lib lib dosyası değil , lisans sözleşmesini öyle adlandırmışlar. onu bir yere ekleyemezsin)
indirdiğin linki göndersene bi.. çünkü benimkinde debug ve release klasörleri yok... ve WintendoXP ye arattırdım *.lib diye ama iki tane copying.lib gözüküyo.. ikiside benzer şeyler..
aynı zamanda /win altındaki projeleri açamıyorum bile...
indirdiğin linki bi gonderirsen sevinirim..
ftp://ftp.cgicc.org/
cgicc-3.2.3.tar.bz2
birde relase ve debug klasorleri , proje derlediğinde kendiliğinden oluşturulacak.
sende neden projeler açılmadın anlamadım, benimki de visual studio6 projesine dönüştürücem dedi ve problemsiz gerçekleştirdi..
acehreli
19/05/2005, 22:28
sckz, seni zora sokan derleyici degil de baglayici tabii. Cunku derleme bitmis, "Linking..." yazmis.
Yapman gereken, Visual Studio'ya cgicc'nin kutuphanelerini de baglama isleminde kullanmasini soylemek. Su anda VS burada olmadigi icin nasil yapildigini hatirlamiyorum.
Ali
gençlik eyvallah zağolun... yannıs zorunlar bitmedi... şimdi dosyayı derliyo (sorun bendeki cgicc den kaynaklanıyomuş.. mr1yh1 arkadaşamızın verdiği linkten indirdim.. bu zefer çalıştı).. şimdi win altındaki projeleri derledi ve bana cgicc.dll ve cgicc.lib dozyalarını üretti... zonra bunnardan cgicc.lib i references a eklerken sorun çıkmadı yannıs cgicc.dll eklerken "Error: adding reference to the project" gibi bi yanıt alıyorum.. neyze Euclides arkadaşımızın dediği gibi #pragma zatırını da yasdım... 1 succeeded yasızını zonunda görebildim.. zonra bunu iis inetpub/wwwrot altına sanal klasör (fiziksel ini de oluşturdum) oluşturup ismini cgi-bin yaptım ve bu klasörde sadece çalıştır iznini verdim.. sonra bir formla bu dosyaya veri göndereyim derken bu hata gönder/gönderme dalgası çıktı (foo.exe kapatılacakmış)... ve dolayısıyla çalışmadı... sonra foo.exe üzerine çift tıkladığımda da aynı yanıtı aldım..
şimdi benim zorunum hata raporu göndermeli miyim yoksa göndermemeli miyim 8)...
yok zorun bu diil... şimdi zorun nedir?
benim zorunum işte bu...
gençlik eyvallah zağolun... yannıs zorunlar bitmedi... şimdi dosyayı derliyo (sorun bendeki cgicc den kaynaklanıyomuş.. mr1yh1 arkadaşamızın verdiği linkten indirdim.. bu zefer çalıştı).. şimdi win altındaki projeleri derledi ve bana cgicc.dll ve cgicc.lib dozyalarını üretti... zonra bunnardan cgicc.lib i references a eklerken sorun çıkmadı yannıs cgicc.dll eklerken "Error: adding reference to the project" gibi bi yanıt alıyorum.. neyze Euclides arkadaşımızın dediği gibi #pragma zatırını da yasdım... 1 succeeded yasızını zonunda görebildim..
galiba çektiğin stabil olmayan sürüm falandı,
bu #pragma comment da maalesef her derleyicide yok, aslında çok faydalı birşey..
bu arada ,derleyici ayarlarından .dll uzantılı birşeyi ekleyemezsin,
sadece .lib dosyasını eklemen lazım.
dll kullanılacaksa, program çalıştıktan sonra onu path arayacak ve yükleyecek ..
ayrıca debug klasörünün altındaki lib ve dll yi kullanmanı öneririm ,
böylece "hatayı yakalama/detaylı rapor gönderme" şansın artar,
(hatta final sürümde bile debug bilgisinin içerilmesi öneriliyor, tabi boyut ve hız dezavantajı olabilir.)..
bol şans :)
korkarım soruma yanıt alamadım... zaten başka yerde cgicc.dll ve cgicc.lib yok ki .. ben de onnarı kullandım.. aynı zamanda ben visual studio da references ı kullanarak daha öncede dll dosyası eklemiştim... ve hala soruma yanıt alabilmiş değilim.....
--debug ve relase klasorlerinde ayrı ayrı lib ve dll dosyalarının olmaları lazım( bende var)..
tabii o projeyi her ikisi içinde derle seçeneğini seçmişsen..
--ayrıca yine geldik .NET e dayandık,
o dll ekleme olayını
.NET kodu için yapmadığından eminmisin ?
--debug klasorundeki lib ve dll nin kullanımı
sorunun cevabı ile ilgili idi ...
çünkü eğer hatayı tanımlıyamazsan,
hata raporu gönderemezsin ?:)
ben "test" i debug .dll ile çalıştırdım.
(makinamda web sunucusu filan yok tabii ki...)
sonuç bu:
http://img273.echo.cx/img273/8436/error3gx.gif
önemli olan verilen detaylı bilgi.. :)
bende sadece debug klasörü içinde böyle bişi var (hatta release klasörü yok).. sonra o dll olayını yanlış hatırlamıyosam .net kodu için yapmıştım...
bi de üretilen dosya (foo.exe) ya çift tıkladığımda da sunucudan çalıştırdığımda da cgicc.dll yi bulamadığını sölüyo.. bende foo.exe nin bulunduğu klasöre cgicc.dll yi ekliyorum.. bu seferde xp nin meşhur hata raporu gönder dalgası cıkıyo...
yani sen derlediğin kodu ve exe sini bu foruma eteçmınt olarak bırakırsan sevinirim.
ya ebesine bindiğiminin kütüphanelerinde sorun var galiba... ya normal Cgicc.h ı ekliyom ve derliyom...herşey normal hatta cout ile html header ı kendim yazınca sorun çıkmıyo... ama ne zaman HTTPHTMLHeader.h ı ekliyom ve bunun içindeki herhangi bir fonksiyonu (HTTPHTMLHeader() ı kullandım) kullanmak istediğimde derliyo fakat... çalıştırmak istediğimde hata raporu gönder dalgası çıkıyo...
Euclides
21/05/2005, 11:50
@sckz:
eğer bu kütüpane senin için çok spesifik fonksiyonlar içermiyorsa belki de başka yollar denemelisin.
Mesela direkt cgi yapsan olmaz mı ?
printf("Content-type:text/html\n\n");
printf("Hello !\n");
gibi...
öle yaptığımda oluyo.. fakat sonrasında başka kütüphaneleri kullanmak istediğimde de aynı sorunlarla karşılaştım... bu cgicc yi vizul stüdyo üzerinde kullanmış, bununla haşır neşir olmuş ve zorun yaşamamış arkadaşlar yok mu... (bu ana kadar cgicc olayını kurmayı denemek yerine oturup kendi sınıflarımı, kendi kütüphanelerimi yazmaya başlasaydım.. herhalde bitmişti 8)..
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.