Rắc rối với memcache.so


8

Tôi đã được yêu cầu khởi chạy một trang web mà người khác xây dựng. Đây là một trang web cửa hàng Wordpress cần Memcached để chạy và tôi đã gặp sự cố khi để Memcached và plugin php memcache hoạt động trên máy chủ cục bộ của tôi. Trước khi cài đặt memcached và plugin PHP memcache, tôi sẽ gặp lỗi này:

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

Bây giờ tôi đã cài đặt memcach và plugin PHP memcache (thông qua Homebrew), tôi nhận được trang "Không nhận được dữ liệu" và nhận được lỗi này trong nhật ký lỗi Apache của tôi:

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)

Tôi đã cố gắng tìm kiếm pid đó trong Activity Monitor nhưng không có kết quả và nó thay đổi mỗi khi tôi cố tải trang. Ngoài ra, tôi không thể tìm thấy bất cứ điều gì về _mmc_queue_pop ở bất cứ đâu.

Tôi đang chạy Mac OSX Lion, PHP ver 5.3.8, Memcached ver 1.4.13 và plugin Memcache PHP ver 3.0.6.

Có ai biết làm thế nào tôi có thể sửa lỗi này?

Cảm ơn!


1
Xây dựng lại memcached với -fgnu89-inlinetrong CFLAGS/ CXXFLAGS. Điều gì xảy ra là inlinetừ khóa theo quy tắc mới gây ra _mmc_queue_popnội tuyến trong tất cả các trường hợp, không để memcache.solại liên kết động.
David Schwartz

Làm cách nào tôi có thể chỉnh sửa CFLAGS / CXXFLAGS cho Homebrew? Tôi có cần sửa đổi một cái gì đó trong tệp Ruby Forumla không?
CourtDemone

Câu trả lời:


8

Như David đã đề cập trong các bình luận, khi xây dựng plugin memcache, KHÔNG tự memcached, bạn phải thêm chạy configurenhư thế này:

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

Điều đó làm việc hoàn hảo cho tôi.


2

Tôi muốn đề xuất như một bước đầu tiên để đảm bảo memcache.so thực sự được liên kết với. Trên linux bạn sẽ sử dụng ldd, trên OSX, nó phải là otool -LIIRC. Điều này có vẻ như plugin bị giữ sai một trong nhiều thư viện memcache trên hệ thống hoặc của một phiên bản không tương thích.


Tôi không phải là người mạnh nhất trong các loại công cụ này. Chính xác thì tôi sẽ phải làm gì trong Terminal để làm điều này?
CourtDemone

1
Tôi chỉ thấy rằng để otool có sẵn, bạn có thể cần cài đặt công cụ Xcode. Trong trường hợp đó, một trang web nên có sẵn. Dù sao đi nữa, David có lẽ đã có vấn đề đóng đinh.
rackandboneman

Tôi đã cài đặt phiên bản Xcode mới nhất, cùng với các công cụ dòng lệnh. Như tôi đã nói trong bài bình luận cho bài viết của David, tôi không biết làm thế nào tôi phải thực hiện điều đó. Bất cứ ai có thể giúp tôi với điều đó?
CourtDemone

1
Kiểm tra tài liệu của Homebrew (nếu đó là nơi memcache của bạn cũng đến) về cách đặt "tùy chọn cấu hình" và CFLAGS. Tôi đề nghị bạn chỉ gây rối với CFLAGS nếu không có "tùy chọn cấu hình" thực sự khả dụng. Tôi quá lạ lẫm với homebrew để đưa ra lời khuyên về sách dạy nấu ăn và lời khuyên chung chung giả sử chu trình cài đặt "./cool --options && make && make install" có thể gây hiểu nhầm. Tuy nhiên, sự quen thuộc với cùng một chu kỳ là TUYỆT VỜI hữu ích khi sử dụng hệ thống xây dựng nguồn BẤT K ..
rackandboneman

Tôi cần một người quen thuộc hơn với Homebrew. Tôi đã thử thêm các dòng CFLAGS vào công thức cài đặt của memcached và nó không cài đặt đúng cách.
CourtDemone

2

Phụ lục - El Capitan, php56, php56-memcache 3.0.8

Sau khi đọc câu trả lời của David Schwartz và CourtDemone, tôi vẫn không hiểu, cho đến khi tôi đọc câu trả lời này trên SO về cách chỉnh sửa công thức homebrew.

Tôi đã thêm các công thức sau vào công thức bằng cách chạy brew edit php56-memcachevà dán vào các dòng sau:

   .  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"

Cảm ơn! Ngoài ra một tài liệu tham khảo khác: github.com/Homebrew/homebrew-php/issues/2529
Pedro Casado
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.