Rabu, 19 Oktober 2016

Compile Source Code Error ? Ini Salahmu


Beberapa menit yang lalu sebelum membuat tulisan ini saya sempat melakukan build wxWidgets. Tapi tiba tiba muncu beberapa baris error dan inti dari error tersebut adalah...
error: 'isascii' was not declared in this scope.

Tunggu, bukannya isascii salah satu fungsi dari library C?
Ya, tapi saya kembali teringat bahwa setiap library menganut standar yang berbeda beda. Itu juga kenapa beberapa fungsi standar di C tidak bisa digunakan di Windows, begitu sebaliknya. Maka dari itu juga, meski library C memang dapat mempermudah aplikasi untuk di portasi ke platform lain, nyatanya itu tak semudah membalikkan telapak tangan.

Setelah error ini, saya pun menyimpunkan bahwa salah satu programmer salah menuliskan kode atau mungkin lupa mengimplementasikan fungsi isascii() nya sendiri. Hmm, tapi apa mungkin? Jika demikian bukannya tidak mungkin source code dapat di publikasi ke publik?

Yah, maka saya mengubah hipotesis saya. Source code yang telah dipublikasikan tak mungkin salah. Ya, tak mungkin salah. Lalu siapa yang salah? Tentu saja yang ingin membuild source dan menggunakannya!

Baik, saya akui saya salah, tapi dimana letak kesalahan saya?
Secara berurutan setelah source diekstrak dan siap di build, ada beberapa hal yang harus dilakukan.
- Mendapatkan library dependensi dengan tepat
- Mengubah konfigurasi dengan tepat
- Melakukan prosedur build dengan tepat.

Untuk melakukan build, saya perlu MinGW atau compiler GCC untuk Windows. Ada yang bilang bisa pakai TDM-GCC. Saya pun pilih TDM-GCC karena instalasi mudah. Selain itu, tidak ada dependensi library apapun.

Mengubah konfigurasi rasanya tidak perlu, karena source sudah bisa langsung dibuild, kecuali jika saya ingin wxWidget di build dengan spesifikai yang aneh-aneh menuruti kemauan saya.

Terakhir, melakukan prosedur build dengan tepat. Ya, ini dia masalahnya. Saya mengikuti prosedur dari luar situs resmi wxWidgets, dan itu pun tulisannya dibuat untuk build wxWidgets versi yang agak lama. Dan, yang benar saja. Di antara banyak hasil penelusuran, kebetulan sekali saya menemukan jawabannya. Memang benar, command untuk mem-build wxWidgets saya salah sedikit.

mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=c++11" MONOLITHIC=1

harusnya,

mingw32-make -j8 -f Makefile.gcc SHARED=1 UNICODE=1 BUILD=release VENDOR=cl CXXFLAGS="-fno-keep-inline-dllexport -std=gnu++11" MONOLITHIC=1

Dari sini saya menyimpulkan bahwa, memang benar tutorial ini ditulis untuk build wxWidgets versi terdahulu. Mungkin pada versi terdahulunya, tidak ada source yang mengimplementasikan fungsi isascii(). Fungsi ini tidak ada pada standar compiler c++11. Jadi jika mau kompilasi berjalan normal, harus pakai standar yang tepat.

Bagi kalian juga yang biasa membuild source code dari luar untuk keperluan project kalian, catat baik-baik. "Source code yang telah dipublikasi tidak mungkin ada salah tulis, kecuali jika memang ada keterangannya". Jika mengalami error, langkah yang terbaik adalah memastikan sendiri, apakah dependensi, konfigurasi dan prosedur sudah benar-benar tepat.
Load disqus comments

0 comments