2013-08-21 8 views
7

मैं माइक्रोसॉफ्ट विजुअल स्टूडियो 2010 का उपयोग कर रहा है, और मैं खुले स्रोत ClamAV पर काम कर रहा हूँ नहीं खोल सकता, मेरे कोड के नीचे जो एक त्रुटिलिंक: गंभीर त्रुटि LNK1181: इनपुट फ़ाइल '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; 
} 
पैदा कर रहा है दिया जाता है गंभीर त्रुटि LNK1181:

निम्न त्रुटि लिंक उत्पन्न होता है खुला इनपुट फ़ाइल 'libclamav.lib'

कृपया मुझे

+0

सी या सी ++?

+0

परंपरागत रूप से यूनिक्स-दुनिया में libXYZ.a क्या है Windows-world में XYZ.lib है। आप दो दुनिया मिश्रण कर रहे हैं। – trojanfoe

+0

शायद आपके कोड के साथ कुछ भी गलत नहीं है। त्रुटि यह है कि आप इसे संकलित करते हैं। कृपया कुछ विवरण दें। – hivert

उत्तर

14

आप दृश्य स्टूडियो में एक LNK1181 त्रुटि मिलती मार्गदर्शन नहीं कर सकते जब उदारीकरण या .obj फ़ाइलें जो लिंकिंग के दौरान निर्दिष्ट हैं नहीं हैं वर्तमान निर्देशिका में पाया गया है, LIBPATH लिंकर विकल्प, या LIB पर्यावरण चर में निर्दिष्ट निर्देशिकाओं में से कोई भी निर्देशिका निर्दिष्ट है।

आप निर्देशिका है कि समस्या को हल करने के लिए LIBPATHlibclamav.lib पुस्तकालय फ़ाइल जोड़ सकते हैं (यह निर्देश अपने दृश्य स्टूडियो संस्करण के आधार पर एक सा भिन्न हो सकते हैं):

  1. समाधान Explorer में, राइट क्लिक करें प्रोजेक्ट, और उसके बाद गुण पर क्लिक करें।
  2. संपत्ति पेज संवाद बॉक्स में, लिंकर विस्तृत करें और फिर क्लिक करें जनरल
  3. अतिरिक्त लाइब्रेरी निर्देशिका फ़ील्ड, उस पथ को निर्दिष्ट करें जहां libclamav.lib रहता है।

त्रुटि तब भी हो सकती है जब LIBPATH में रिक्त स्थान होते हैं। यदि ऐसा है, तो लाइब्रेरी को रिक्त स्थान के बिना पथ पर ले जाएं या पथ के चारों ओर उद्धरण चिह्न डालें।

+1

मेरी इच्छा है कि मैं आपको 1000 अपवॉट दे सकता हूं! मैं एक विरासत परियोजना को अद्यतन करने की कोशिश कर रहा हूं, और LIBPATH में रिक्त स्थान था। मैं खोज रहा हूं कि घंटों की तरह क्या लगता है, और किसी और ने इसका सुझाव नहीं दिया। मुझे नहीं पता कि यह मूल देव पर्यावरण पर कैसे काम कर रहा था! हो सकता है कि वे इसे एलआईबी में भी समेकित कर सकें ... किसी भी घटना में, मुझे नहीं पता कि वीएस के आधुनिक संस्करण उस के साथ कैसे निपटते हैं, लेकिन वीसी ++ 6 (पूछो मत!) जो भी कुछ भी असफल नहीं हुआ। – shiser

+0

बस अगर किसी और ने इस पर ठोकर खाई, तो मेरी गलती अधिक बुनियादी और मूर्ख थी। मैं "केवल परियोजना" के भीतर निर्माण करने का प्रयास कर रहा था। पहले अपनी निर्भरताओं का निर्माण सुनिश्चित करें! तो अपनी प्रोजेक्ट फ़ाइल पर राइट क्लिक करें और बिल्ड पर क्लिक करें। – Karoh

1

आप डॉस "8.3" प्रारूप में लाइब्रेरी पथ निर्दिष्ट करके इसे ठीक भी कर सकते हैं। रिकर्सिवली निर्देशिका के हर स्तर के माध्यम से

DIR /AD /X 

:

8.3 प्रपत्र प्राप्त करने के लिए, (आदेश पंक्ति पर) है।

संबंधित मुद्दे