2011-01-13 11 views
6

Json dizesini ayrıştıran bir çözümleyici üzerinde çalışıyorum ve bunu bir kitaplık yapmak istiyorum. sorun yazdığım kütüphane bağlamak ld kullandığınızda, bir hata mesajı olmasıdır: Fleks ve bizonun 'ana' rutinini nasıl ortadan kaldırabilirim, böylece lexing ve ayrıştırma işlemini bir kütüphaneye yerleştirebilirim?

main.o: In function `main': 
main.c:(.text+0x0): multiple definition of `main' 
json-parser.o:/build/buildd/flex-2.5.35/libmain.c:29: first defined here 

nasıl düzeltebilirim

..? Teşekkürler.

+0

CPPFLAGS = -Dmain = foo –

cevap

5

Ne esnek ne de bizon sizin için ana işlevi oluşturduğundan, kitaplık yolunda olan kodun kendi main() olması gerekir. Temel olarak, bir kitaplığa main() koymayın.

Ancak, Flex kitaplığı (-lfl, /usr/lib/libfl.*) ve Yacc kitaplığı (-ly, /usr/lib/liby.*) hem aslında yapmak bir ilkel main() programı içerdiğini not etmek sadece adil. Bu kitaplıklardan birini veya her ikisini de kullanırsanız, kitaplıklarınız taranmadan önce, kendi nesne dosyanızın main() ile bağlantılı olduğundan emin olmalısınız. gcc -o charcount -lfl charcount.o yerine gcc -o charcount charcount.o -lfl kullanılarak

+0

evet öyle '-lfl' çok teşekkürler ~~~~ O, bu değil garip anlatılmış oluyor – mapcan

6

yardımcı olabilir.

Nesne dosyasının ve paylaşılan kütüphanenin sırasının burada önemli bir anlam taşıdığı gariptir, ancak tersine çevirme gerçekten işe yarıyor.

+0

[Bu cevap] (https://stackoverflow.com/a/4682741/1983495). –

İlgili konular