2013-08-21 16 views
7

Microsoft Visual Studio 2010 kullanıyorum ve ben açık kaynak Clamav üzerinde çalışıyorum açamaz, benim kod bir hatayıLİNK: önemli hata LNK1181: girdi dosyası 'libclamav.lib'

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <io.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <clamav.h> 


int main(int argc, char **argv) 
{ 
int fd, ret; 
unsigned long int size = 0; 
unsigned int sigs = 0; 
long double mb; 
const char *virname; 
struct cl_engine *engine; 


if(argc != 2) { 
printf("Usage: %s file\n", argv[0]); 
return 2; 
} 

if((fd = open(argv[1], O_RDONLY)) == -1) { 
printf("Can't open file %s\n", argv[1]); 
return 2; 
} 

if((ret = cl_init(CL_INIT_DEFAULT)) != CL_SUCCESS) { 
printf("Can't initialize libclamav: %s\n", cl_strerror(ret)); 
return 2; 
} 

if(!(engine = cl_engine_new())) { 
printf("Can't create new engine\n"); 
return 2; 
} 

/* load all available databases from default directory */ 
if((ret = cl_load(cl_retdbdir(), engine, &sigs, CL_DB_STDOPT)) != CL_SUCCESS) { 
printf("cl_load: %s\n", cl_strerror(ret)); 
close(fd); 
    cl_engine_free(engine); 
return 2; 
} 

printf("Loaded %u signatures.\n", sigs); 

/* build engine */ 
if((ret = cl_engine_compile(engine)) != CL_SUCCESS) { 
printf("Database initialization error: %s\n", cl_strerror(ret));; 
    cl_engine_free(engine); 
close(fd); 
return 2; 
} 

/* scan file descriptor */ 
if((ret = cl_scandesc(fd, &virname, &size, engine, CL_SCAN_STDOPT)) == CL_VIRUS) { 
printf("Virus detected: %s\n", virname); 
} else { 
if(ret == CL_CLEAN) { 
    printf("No virus detected.\n"); 
} else { 
    printf("Error: %s\n", cl_strerror(ret)); 
    cl_engine_free(engine); 
    close(fd); 
    return 2; 
} 
} 
close(fd); 

/* free memory */ 
cl_engine_free(engine); 

/* calculate size of scanned data */ 
mb = size * (CL_COUNT_PRECISION/1024)/1024.0; 
printf("Data scanned: %2.2Lf MB\n", mb); 

return ret == CL_VIRUS ? 1 : 0; 
} 
oluşturuyor hangi aşağıda verilmiştir önemli hata LNK1181:

aşağıdaki hata LINK oluşturulur açık girdi dosyası 'libclamav.lib'

nazikçe bana Visual Studio'da bir LNK1181 hatası alıyorum

+0

C veya C++?

+0

Geleneksel olarak, UNIX dünyasında libXYZ.a'nın Windows dünyasında XYZ.lib olduğunu. İki dünyayı karıştırıyor gibisin. – trojanfoe

+0

Kodunuzda muhtemelen yanlış bir şey yoktur. Hata, onu derlemenin yolu. Lütfen biraz detay verin. – hivert

cevap

14

rehberlik edemez zaman .Lib veya .obj dosyaları bağlantı sırasında belirtilenler değil Geçerli dizinde, LIBPATH bağlayıcı seçeneği tarafından belirtilen dizinlerden herhangi birini veya LIB ortam değişkeninde belirtilen dizinlerden herhangi birini bulundu.

Sorunu çözmek için LIBPATH için libclamav.lib kütüphane dosyasını içeren dizini ekleyebilirsiniz (bu talimatlar Visual Studio sürümüne bağlı biraz değişebilir):

Solution Explorer'da
  1. sağ tıklayın proje ve sonra Özellikler'u tıklatın. özellik sayfaları iletişim kutusunda
  2. , Bağlayıcı genişletin ve Genel tıklayın.
  3. Ek Kütüphane Dizinleri alanında, libclamav.lib'un bulunduğu yolu belirtin.

Hata, LIBPATH boşluk içeriyorsa da gerçekleşebilir. Bu durumda, kitaplığı boşluksuz bir yola taşıyın veya yolun etrafına tırnak işaretleri koyun.

+1

Keşke sana 1000 tane hediye verebilseydim! Eski bir projeyi güncellemeye çalışıyorum ve LIBPATH'ın içinde boşluklar var. Saat gibi görünenleri arıyordum ve başka hiç kimse bunu önermedi. Orijinal dev ortamında nasıl çalıştığı hakkında hiçbir fikrim yok! Belki de LIB'de övgüye değer bir şey yaşadılar ... Her halükarda, VS'nin nasıl modern sürümlerinin bununla uğraştığını bilmiyorum, ama VC++ 6 (Sorma!) Hiç bir şekilde başarısız olmadı. – shiser

+0

Sadece bunun üzerine başka biri gelse, benim hatam daha basit ve aptaldı. "Sadece proje" içinde inşa etmeye çalışıyordum. İlk önce bağımlılıklarınızı oluşturduğunuzdan emin olun! Bu yüzden proje dosyanızı sağ tıklayın ve oluştur'u tıklayın. – Karoh

1

DOS "8.3" biçimindeki kitaplık yolunu belirterek de düzeltebilirsiniz.

8.3 formunu elde etmek için, (komut satırında) yapın:

DIR /AD /X 

alt dizinlere her seviyesinde yoluyla.