Masalah dengan memcache.so


8

Saya diminta untuk meluncurkan situs yang dibuat orang lain. Ini adalah situs toko Wordpress yang membutuhkan Memcached untuk dijalankan, dan saya mengalami kesulitan dalam memcached dan plugin php memcache bekerja di server lokal saya. Sebelum menginstal memcached dan memcache PHP plugin, saya akan mendapatkan kesalahan ini:

Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350

Sekarang saya telah memcached dan plugin memcache PHP diinstal (melalui Homebrew), saya mendapatkan halaman "Tidak ada data yang diterima", dan mendapatkan kesalahan ini di log kesalahan Apache saya:

dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

dyld: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

[Sat May 05 16:38:27 2012] [notice] child pid 26491 exit signal Trace/BPT trap (5)

Saya sudah mencoba mencari pid itu di Activity Monitor tetapi tidak berhasil, dan itu berubah setiap kali saya mencoba memuat halaman. Juga, saya tidak dapat menemukan apa pun tentang _mmc_queue_pop di mana saja.

Saya menjalankan Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13, dan Memcache PHP plugin ver 3.0.6.

Adakah yang tahu bagaimana saya bisa memperbaikinya?

Terima kasih!


1
Bangun ulang memcached dengan -fgnu89-inlinedi CFLAGS/ CXXFLAGS. Apa yang terjadi adalah inlinekata kunci di bawah aturan baru menyebabkan _mmc_queue_popinline dalam semua kasus, tidak meninggalkan apa pun untuk memcache.sotautan secara dinamis.
David Schwartz

Bagaimana saya mengedit CFLAGS / CXXFLAGS untuk Homebrew? Apakah saya perlu memodifikasi sesuatu di file Ruby Forumla?
CourtDemone

Jawaban:


8

Seperti yang disebutkan David dalam komentar, ketika membuat plugin memcache, TIDAK memcached dirinya sendiri, Anda harus menambahkan run configureseperti ini:

MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-fgnu89-inline' LDFLAGS='-fgnu89-inline' CXXFLAGS='-fgnu89-inline' ./configure

Itu bekerja dengan baik untuk saya.


2

Saya menyarankan sebagai langkah pertama untuk memastikan memcache.so benar-benar terkait. Di linux yang akan Anda gunakan ldd, pada OSX itu harus otool -LIIRC. Ini terlihat seperti plugin mendapatkan salah satu dari beberapa pustaka memcache pada sistem, atau versi yang tidak kompatibel.


Saya bukan yang terkuat dalam hal-hal semacam ini. Apa tepatnya yang harus saya lakukan di Terminal untuk melakukan ini?
CourtDemone

1
Saya hanya melihat bahwa untuk otool tersedia, Anda mungkin perlu menginstal alat Xcode. Dalam hal ini, halaman manual harus tersedia. Dalam hal apa pun, David mungkin sudah menyelesaikan masalahnya.
rackandboneman

Saya telah menginstal versi terbaru Xcode, bersama dengan alat-alat baris perintah. Seperti yang saya katakan dalam komentar pada posting David, saya tidak tahu bagaimana saya harus mengimplementasikannya. Adakah yang bisa membantu saya dengan itu?
CourtDemone

1
Periksa dengan dokumentasi Homebrew (jika dari situlah memcache Anda juga) tentang cara mengatur "configure options" dan CFLAGS. Saya sarankan Anda hanya mengacaukan CFLAGS jika tidak ada "opsi konfigurasi" yang sebenarnya tersedia. Saya terlalu terbiasa dengan homebrew untuk memberikan saran buku resep, dan saran umum dengan asumsi siklus instalasi "./configure --options && make && make install" mungkin menyesatkan. Namun, keakraban dengan siklus yang sama sangat membantu ketika mengacaukan sistem membangun sumber APAPUN.
rackandboneman

Saya membutuhkan seseorang yang lebih akrab dengan Homebrew. Saya mencoba menambahkan baris CFLAGS ke formula instalasi memcached dan tidak menginstal dengan benar.
CourtDemone

2

Tambahan - El Capitan, php56, php56-memcache 3.0.8

Setelah membaca jawaban David Schwartz dan CourtDemone, saya masih belum mengerti, sampai saya membaca jawaban ini di SO tentang cara mengedit formula rumahan.

Saya menambahkan berikut ini ke rumus dengan menjalankan brew edit php56-memcachedan menempelkan di baris berikut:

   .  20     safe_phpize
   .  21 
   +  22     ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.11'
   +  23     ENV['CFLAGS'] = '-fgnu89-inline'
   +  24     ENV['LDFLAGS'] = '-fgnu89-inline'
   +  25     ENV['CXXFLAGS'] = '-fgnu89-inline'
   +  26 
   .  27     system "./configure", "--prefix=#{prefix}",
   .  28                           phpconfig
   .  29     system "make"

Terima kasih! Juga referensi lain: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.