天天看點

mudOS源碼 options.h配置詳細選項

1 /* options.h配置詳細選項
  2 —————————————————————————-
  3 将 MudOS 下載下傳解壓以後可以在相應目錄的根目錄中找到 options.h 這個檔案。如果修
  4  改了這個檔案,那麼每次都需要重新編譯 MudOS 才能生效。重新編譯之前,請執行 ma
  5  ke clean 一下。
  6  下面的 options.h 來自 MudOSv22.2b10,MudOS作者推薦在修改options.h 之前,先将
  7  它備份成 local_options。新的特性将會自動對比local_options并且在編譯的時候告知
  8  。文中的選項定義并非最原始的定義。此文隻是為了說明各個選項的大緻含義。
  9 options.h: defines for the compile-time configuration of the MudOS driver
 10  */
 11 
 12 #ifndef _OPTIONS_H_
 13  #define _OPTIONS_H_
 14 
 15 /****************************************************************************
 16 如果你對自己的系統不熟悉,請使用預設的定義 SYSMALLOC,同時将其它的undef掉。
 17  你必須選擇下面的其中一種定義,并且将其它的定義undef掉。
 18 SYSMALLOC: 預設選項,沒有額外的系統開支,沒有統計能力。
 19 SMALLOC:速度比較快,但是開銷相對大一些。
 20 BSDMALLOC:速度更快,開銷比較大。
 21 ****************************************************************************/
 22 
 23 #define SYSMALLOC
 24  #undef SMALLOC
 25  #undef BSDMALLOC
 26 
 27 /****************************************************************************
 28  WRAPPEDMALLOC:這個附加定義可以換來有限的統計能力,并且不會增加太多的系統開銷。
 29 DEBUGMALLOC:系統花費比較折中
 30 ****************************************************************************/
 31  #undef WRAPPEDMALLOC
 32  #undef DEBUGMALLOC
 33 
 34 /****************************************************************************
 35 如果沒有定義SMALLOC,請不要使用下面這個定義。
 36 ****************************************************************************/
 37  #undef SBRK_OK
 38 
 39 /****************************************************************************
 40 如果沒有定義 BSDMALLOC or SMALLOC ,請不要使用下面這個定義
 41 ****************************************************************************/
 42  #undef DO_MSTATS
 43 
 44 /****************************************************************************
 45  DEBUGMALLOC定義的附加定義,用來強化DEBUGMALLOC,但是需要更多的開銷。
 46 set_malloc_mask(int) and debugmalloc(string,int)等efuns将可以被使用。
 47 ****************************************************************************/
 48  #undef DEBUGMALLOC_EXTENSIONS
 49 
 50 /****************************************************************************
 51 同上,是用來調試的良好定義,check_memory() efun将可以被使用。
 52 ****************************************************************************/
 53  #undef CHECK_MEMORY
 54 
 55 /****************************************************************************
 56 相容性定義選項:
 57  由于MudOS發展了很多年,是以曆代MudOS為了保證原有的Lib可以不修改就被移植到新的
 58 OS上面,增加了這些相容性選項。如果你是根據OS撰寫Lib的人,可以定義一些優化的選
 59  項來設計自己的Lib,而不必考慮重寫的問題。
 60  以前的MudOS使用status這樣子的定義詞,這是很老的定義了,對于新的Lib設計而言,
 61  這個定義毫無用處。
 62 ****************************************************************************/
 63  #undef HAS_STATUS_TYPE
 64 
 65 /****************************************************************************
 66  explode()選項,這個根據個人的習慣來定義吧
 67  如果不定義下面兩個選項, explode(“..x.y..z..”, “.”) 的結果是 ({ “x”, “y”, “”
 68 , “z”, “” })
 69 如果定義SANE_EXPLODE_STRING 選項,其結果将是({ “”, “x”, “y”, “”, “z”, “” })
 70 如果定義 REVERSIBLE_EXPLODE_STRING 選項,其結果将是 ({ “”, “”, “x”, “y”, “”,
 71 “z”, “”, “” })
 72  ****************************************************************************/
 73  #define SANE_EXPLODE_STRING
 74  #undef REVERSIBLE_EXPLODE_STRING
 75 
 76 /****************************************************************************
 77 這個選項用來确定call_other的行為,但是這個選項對于系統毫無好處可言。
 78 ****************************************************************************/
 79  #undef CAST_CALL_OTHERS
 80 
 81 /****************************************************************************
 82 如果定義了下面這個選項,那麼任何傳往非互動式物件(比如npc)的資訊前面都會被加
 83  上’]'符号,這個也不是非常需要,而且很容易被模拟出來。
 84 ****************************************************************************/
 85  #undef NONINTERACTIVE_STDERR_WRITE
 86 
 87 /****************************************************************************
 88 如果定義下面這個選項,你将不能使用set_light()這樣的efuns函數,不過沒有關系,
 89  這個函數是在太落伍了,這個功能非常容易被模拟出來。
 90 ****************************************************************************/
 91  #define NO_LIGHT
 92 
 93 /****************************************************************************
 94 嗯,下面這個選項,是非常重要的選項,如果你定義了,那麼意味着你将不能使用add_
 95  action, commands, livings等等這些相關的efuns,而不得不使用 process_input() 這
 96  樣的函數來定義物件所有的動作。這将是非常難堪的工作。是以保持add_action還是非
 97  常有用的。
 98 ****************************************************************************/
 99  #undef NO_ADD_ACTION
100 
101 /****************************************************************************
102 定義下面這個選項,将不能使用和snoop相關的函數,如果你認為沒有snoop也沒有關系
103  ,可以定義這個選項來保護一些隐私。
104 ****************************************************************************/
105  #undef NO_SNOOP
106 
107 /****************************************************************************
108 這個選項和add_action一樣要命,除非你立志隻做一個聊天室,那麼可以定義這個選項
109  ,否則,你的工作将會非常的麻煩。
110 ****************************************************************************/
111  #undef NO_ENVIRONMENT
112 
113 /****************************************************************************
114 由于曆史原因,定義wizard來管理Mud的運作,但是現在好像不是非常重要了。
115  如果定義了, wizardp() 和 related efuns 将不存在
116  如果沒有定義,在使用ed()時也受限制,設定的限制參數無效
117  而且這個定義非常容易模拟出來。
118 ****************************************************************************/
119  #undef NO_WIZARDS
120 
121 /****************************************************************************
122 下面的選項隻是為了保持相容性問題,對于大多數的LPmud而言,這個選項毫無用處。尤
123  其是一個新的Lib撰寫。
124 ****************************************************************************/
125  #undef OLD_TYPE_BEHAVIOR
126 
127 /****************************************************************************
128 定義下面這個選項,将意味着對于一個string或者buffers而言可以使用負數的index。
129  對于一個新Lib撰寫,這個屬性不是非常重要。
130 ****************************************************************************/
131  #undef OLD_RANGE_BEHAVIOR
132 
133 /****************************************************************************
134 這個定義選項主要是為了保持向後相容,對于新的Lib而言,沒什麼用處。重新習慣一個
135  方式,并不是非常困難的,而且,ed()對于大多數習慣使用工具撰寫的人們而言,意義
136  不大。
137 ****************************************************************************/
138  #define OLD_ED
139 
140 /****************************************************************************
141 下面這個選項比較重要,對于新的Lib撰寫或者以前沒有接觸過LPC的人來說,這個定義
142  可以按照喜好來定。
143 (1) ‘static’ 将不再使用,而是用 ‘nosave’ 或者 ‘protected’ 代替了它。.
144  (2) ‘public’ 含義發生了變化,外部函數必須在任何一級的繼承中被聲明。現在publi
145  c意味着是明顯可見的。
146 ****************************************************************************/
147  #define SENSIBLE_MODIFIERS
148 
149 /****************************************************************************
150 下面的選項定義會改變MudOS的一些行為。這些對于Lib撰寫,是比較重要的。
151  定義下面這個選項,将使用MD5加密法代替系統預設的crypt()加密法。
152 ****************************************************************************/
153  #undef CUSTOM_CRYPT
154 
155 /****************************************************************************
156 下面這個選項隻是為了一些相容性問題。定義以後,某些efuns含義會有所變化,但是沒
157  有實質的差別。
158 ****************************************************************************/
159  #undef COMPAT_32
160 
161 /****************************************************************************
162 允許統計的時候包含字元串配置設定,不定義可以是字元串處理更快,但字元串統計将被忽略。
163 ****************************************************************************/
164  #define STRING_STATS
165 
166 /****************************************************************************
167 同上,數組統計。
168 ****************************************************************************/
169  #define ARRAY_STATS
170 
171 /****************************************************************************
172 這是比較有用的選項,用來生成log檔案。
173 ****************************************************************************/
174  #define LOG_CATCHES
175 
176 /****************************************************************************
177 這個類似上面得選項,可以生成有用的調試文檔。
178 ****************************************************************************/
179  #define ARGUMENTS_IN_TRACEBACK
180 
181 /****************************************************************************
182 同上,對于新Lib撰寫非常有用。
183 ****************************************************************************/
184  #define LOCALS_IN_TRACEBACK
185 
186 /****************************************************************************
187 通過error_handler()來處理錯誤,非常有用的選項。
188 ****************************************************************************/
189  #define MUDLIB_ERROR_HANDLER
190 
191 /****************************************************************************
192 下面得選項,可以詳細定義,當然也可以通過配置config.cfg這樣的檔案來設定。
193 ****************************************************************************/
194  #ifndef LATTICE
195  #define CONFIG_FILE_DIR “/u/tim/COMP/bin”
196 #else
197  #define CONFIG_FILE_DIR “etc:”
198 #endif
199 
200 /****************************************************************************
201 下面的選項将會對整個Lib撰寫起到作用。對于新的Lib撰寫,建議選擇比較嚴格的方式
202  。而如果想保持相容,建議選擇正常的設定。
203  這些設定 其實等同于使用 #pragma 來定義。
204  如果你不太明白,使用 #define DEFAULT_PRAGMAS 0 是一個比較好的選擇。
205 PRAGMA_STRICT_TYPES: 強制執行嚴格的書寫規則,這個估計是以前議論最多的問題,
206  事實上,對于新Lib,這幾乎不是問題。
207 PRAGMA_WARNINGS: 對不合法代碼進行警告。非常有用。
208 PRAGMA_SAVE_TYPES: 呼叫以後儲存函數情況
209 PRAGMA_SAVE_BINARY: 二進制代碼儲存,可以降低系統負擔。
210 PRAGMA_OPTIMIZE: 代碼優化
211 PRAGMA_ERROR_CONTEXT:錯誤報告
212 ****************************************************************************/
213  #define DEFAULT_PRAGMAS PRAGMA_SAVE_BINARY + PRAGMA_WARNINGS + PRAGMA_ERROR_CONTEXT
214 
215 /****************************************************************************
216 對于沒有使用的變量聲明或者缺少的參數進行報告
217 ****************************************************************************/
218  #define SUPPRESS_ARGUMENT_WARNINGS
219 
220 /****************************************************************************
221 這是重要的設定,為了保證系統擁有reset(),請不要定義這個選項。
222  除非不想系統擁有reset()。
223 ****************************************************************************/
224  #undef NO_RESETS
225 
226 /****************************************************************************
227 看名字就知道,如果定義了,reset()将變得比較懶惰,你不碰它,它不呼叫。對于大多
228  數需要重新整理時間的LPmud而言,還是不要定義的好。
229 ****************************************************************************/
230  #undef LAZY_RESETS
231 
232 /****************************************************************************
233 存盤檔案的預設字尾名。
234 ****************************************************************************/
235  #define SAVE_EXTENSION “.o”
236 
237 /****************************************************************************
238 下面兩個選項使用來控制ansi的使用者輸入的,這個比較容易模拟出來,因為自由的ansi
239 輸入可能會導緻一些顯示錯誤。
240 ****************************************************************************/
241  #define NO_ANSI
242  #define STRIP_BEFORE_PROCESS_INPUT
243 
244 /****************************************************************************
245 筆者水準有限,不知道OPC是什麼東西。隻知道定義以後,可以用一個opcprof()函數來
246  統計外部函數調用的情況。下面得選項稍有不同,一次隻能定義其中的一個。
247 ****************************************************************************/
248 #undef OPCPROF
249 #undef OPCPROF_2D
250 
251 /****************************************************************************
252 當這個選項定義以後,當發生crash的時候,master.c中定義的crash()将被呼叫。
253 ****************************************************************************/
254  #define TRAP_CRASHES
255 
256 /****************************************************************************
257 可以在call_outs中使用this_player()
258  ****************************************************************************/
259  #define THIS_PLAYER_IN_CALL_OUT
260 
261 /****************************************************************************
262 這個定義是比較有用的,定義以後,call_out将産生一個int序列,這個序列可以友善的
263  被find_call_out()和remove_call_out()調用。這是一個效率極高的處理方式。原來使
264  用name來處理的方式相對比較低效。唯一的代價是些許系統開銷。
265 ****************************************************************************/
266  #define CALLOUT_HANDLES
267 
268 /****************************************************************************
269 調試非常有用,一般情況下不需要。
270 ****************************************************************************/
271  #undef FLUSH_OUTPUT_IMMEDIATELY
272 
273 /****************************************************************************
274 這個定義允許在Lib中給與一些object以特權,除非你非常了解這個定義對于你所要撰寫
275  的Lib的用處,不然的話,不要定義這個。
276 ****************************************************************************/
277  #undef PRIVS
278 
279 /****************************************************************************
280 下面這個定義可以使互動物件也适用catch_tell(),當然你就必須在user.c中寫入catc
281  h_tell()來處理receive(msg)。
282 ****************************************************************************/
283  #undef INTERACTIVE_CATCH_TELL
284 
285 /****************************************************************************
286 受限制的ed模式
287 ****************************************************************************/
288  #define RESTRICTED_ED
289 
290 /****************************************************************************
291 使用下面這個定義,你就不能在想要撰寫的Lib中使用shadow,而shadow往往非常有用,
292  是以除非你明确知道不需要,不然不要定義這個選項。
293 ****************************************************************************/
294  #undef NO_SHADOWS
295 
296 /****************************************************************************
297 定義下面這個,可以snoop shadowed object,因為shadowed object可能不知道送過來
298  的msg。
299 ****************************************************************************/
300  #undef SNOOP_SHADOWED
301 
302 /****************************************************************************
303 這是一個有趣的定義,可以讓你監聽snooper的msg,也許利用起來比較有趣。當然也可
304  以不定義它。
305 ****************************************************************************/
306  #define RECEIVE_SNOOP
307 
308 /****************************************************************************
309 這不是一個非常準确的定義,如果你想知道物件調用函數的時候,使用了多少時間,可
310  以用這個試試。不過不要對它的準确性基于太多的希望。
311 ****************************************************************************/
312  #define PROFILE_FUNCTIONS
313 
314 /****************************************************************************
315 ‘buffer’這個類型定義的選擇,按所要撰寫的Lib而定,如果你可能要用到這種變量定義
316  ,就不要定義這個選項。
317 ****************************************************************************/
318  #undef NO_BUFFER_TYPE
319 
320 /****************************************************************************
321 設定 pragma ’save_binary’ 的有效性。
322  使用這個選項,可以是Lib運作速度有所提高,并且降低系統的開銷。代價就是将占用更
323  多的硬碟空間。
324 ****************************************************************************/
325  #define BINARIES
326 
327 /****************************************************************************
328 允許定義數組變量,關鍵字array。比如 int array x = ({…});
329 不過估計這樣定義也不會有人反對 int *x = ({});
330 定義這個選項與否,主要是看是不是習慣使用array這個聲明,如果你來自C或者java,
331  也許會喜歡的。
332 ****************************************************************************/
333  #define ARRAY_RESERVED_WORD
334 
335 /****************************************************************************
336 這個同上,關鍵字ref。按照Lib撰寫人的習慣來定義比較好。
337 ****************************************************************************/
338  #define REF_RESERVED_WORD
339 
340 /****************************************************************************
341 擴充包是可選配件
342  如果你定義了PACKAGE_XYZZY,那麼你可以參看 packages/xyzzy.c 中的函數來确定可
343  以使用哪些efuns。
344  确定使用哪些擴充包,主要取決于提供的efuns是否是需要的。
345 
346 ****************************************************************************/
347 
348 /****************************************************************************
349 這個擴充包的函數還是非常有用的,比如query_ip_port() repeat_string()等等。
350 
351 ****************************************************************************/
352 
353 #define PACKAGE_CONTRIB
354 
355 /****************************************************************************
356 下面這個包主要用來了解driver内部的資訊。
357 ****************************************************************************/
358  #define PACKAGE_DEVELOP
359 
360 /****************************************************************************
361 
362 ****************************************************************************/
363  #define PACKAGE_MATH
364 
365 /****************************************************************************
366 這個是圖像處理包,不過,筆者也沒用過。
367 ****************************************************************************/
368  #undef PACKAGE_MATRIX
369 
370 /****************************************************************************
371 這個包的函數用來了解Mudlib的資料,比較實用。
372 ****************************************************************************/
373  #undef PACKAGE_MUDLIB_STATS
374 
375 /****************************************************************************
376 呵呵,這個當然非常有用了。
377 ****************************************************************************/
378  #define PACKAGE_SOCKETS
379 
380 /****************************************************************************
381 這個用處不大,尤其是中文使用者,呵呵
382 ****************************************************************************/
383  #undef PACKAGE_PARSER
384 
385 /****************************************************************************
386 這個也沒什麼大的用處。允許driver在config檔案裡exe()指令清單
387 ****************************************************************************/
388  #undef PACKAGE_EXTERNAL
389 
390 /****************************************************************************
391 外部擴充指令支援的數目
392 ****************************************************************************/
393  #ifdef PACKAGE_EXTERNAL
394  #define NUM_EXTERNAL_CMDS
395  #endif
396 
397 /****************************************************************************
398 資料庫支援包,想用資料庫mysql的Lib撰寫者比較有用,
399 ****************************************************************************/
400  //#define PACKAGE_DB
401  #undef PACKAGE_DB
402  /****************************************************************************
403 如果PACKAGE_DB被定義,必須選擇下面中的一個來支援資料庫
404 ****************************************************************************/
405  #ifdef PACKAGE_DB
406  #define USE_MSQL 1 /* MiniSQL, it’s small; it’s free */
407  #undef USE_MYSQL 2 /* MySQL, bigger; it’s free */
408  #define DEFAULT_DB USE_MSQL /* default database */
409  #endif
410 
411 /****************************************************************************
412   UID,就是使用者有效識别碼,國内的LPMud大多基于 wizard 以及 uid 系統,如果不
413  是新Lib的撰寫者,這個是比較有用的。如果你擁有了自己的理念,可以不使用這些定義
414  。從MudOS開發者來看,他們也沒有明确說不需要這些。雖然本人倒是比較喜歡放棄這些
415  設定,但是這些設定的存在,确實可以友善很多的處理。
416  如果你打算使用UID,那就定義下面這個選項。
417 ****************************************************************************/
418  #define PACKAGE_UIDS
419 
420 /****************************************************************************
421 自動設定UID,那就不需要每次都seteuid(getuid(this_object()))。如果需要seteuid
422  (0),那麼不要定義這個,比如現在大多數的Lib。
423 ****************************************************************************/
424  #define AUTO_SETEUID
425 
426 /****************************************************************************
427  backbone這個設定是被自動認可的。
428 ****************************************************************************/
429  #define AUTO_TRUST_BACKBONE
430 
431 /****************************************************************************
432 下面這些設定,一般情況下,不需要做出大的調整。
433  資源問題,使用32位位址。
434 ****************************************************************************/
435  #undef USE_32BIT_ADDRESSES
436 
437 /****************************************************************************
438 心跳時間,這裡是一秒。
439 ****************************************************************************/
440  #define HEARTBEAT_INTERVAL 2000000
441 
442 /****************************************************************************
443  call_out的設定
444 ****************************************************************************/
445  #define CALLOUT_CYCLE_SIZE 64
446 
447 /****************************************************************************
448 資訊暫存設定
449 ****************************************************************************/
450  #define LARGEST_PRINTABLE_STRING 8192
451 
452 /****************************************************************************
453 輸出資訊buffer設定
454 ****************************************************************************/
455  #define MESSAGE_BUFFER_SIZE 65536
456 
457 /****************************************************************************
458 定義call_other cache的bits number
459  6 64 1k
460  8 256 4k
461  10 1024 16k
462  12 4096 64k
463  14 16384 256k
464  16 65536 1M
465  ****************************************************************************/
466  #define APPLY_CACHE_BITS 12
467 
468 /****************************************************************************
469  call_other的cache統計
470 ****************************************************************************/
471  #define CACHE_STATS
472 
473 /****************************************************************************
474 不定義可以快一點。
475 ****************************************************************************/
476  #undef TRACE
477 
478 /****************************************************************************
479  LPC->C的編譯
480 ****************************************************************************/
481  #undef LPC_TO_C
482 
483 /****************************************************************************
484 看系統而定,一般不需要定義。
485 ****************************************************************************/
486  #undef RUNTIME_LOADING
487 
488 /****************************************************************************
489 這個定義以後,允許被跟蹤執行。
490 ****************************************************************************/
491  #undef TRACE_CODE
492 
493 /****************************************************************************
494 預設設定是32,主要關系到 heart_beat 的系統開銷。
495 ****************************************************************************/
496  #define HEART_BEAT_CHUNK 64
497 
498 /****************************************************************************
499 一般情況下,get_char不是bufferd。是以不太必要定義這個選項。
500 ****************************************************************************/
501  #undef GET_CHAR_IS_BUFFERED
502 
503 /****************************************************************************
504 字元串定義。
505 ****************************************************************************/
506  #define SMALL_STRING_SIZE 100
507  #define LARGE_STRING_SIZE 1000
508 
509 /****************************************************************************
510 指令buffer定義。
511 ****************************************************************************/
512  #define COMMAND_BUF_SIZE 2000
513 
514 /****************************************************************************
515 呵呵,如果dbase深度超過了25就會溢出,這個設定就是這裡定義的。當年最常見的一個
516  當機bug就是set指令的dbase溢出導緻的。
517 ****************************************************************************/
518  #define MAX_SAVE_SVALUE_DEPTH 50
519 
520 /****************************************************************************
521  25個局部變量調用,對于一個函數來說,應該是夠了。數數COMBAT_D中的attack()函數
522  用到了幾個局部變量。本人曾經定義超過25個變量,結果導緻出錯,但是那個時候不知
523  道為什麼,雖然預感到這一點,可以在mud配置檔案中定義。
524 ****************************************************************************/
525  #define CFG_MAX_LOCAL_VARIABLES 100
526  #define CFG_EVALUATOR_STACK_SIZE 2000
527  #define CFG_MAX_CALL_DEPTH 100
528 
529 /****************************************************************************
530 下面定義的必須選擇 4, 16, 64, 256, 1024, 4096 中的一個數字
531 ****************************************************************************/
532  #define CFG_LIVING_HASH_SIZE 1024
533 
534 /****************************************************************************
535  NEXT_MALLOC_DEBUG: define this if using a NeXT and you want to enable
536  the malloc_check() and/or malloc_debug() efuns. Run the ‘man malloc_debug’
537 command on the NeXT to find out what the arguments to malloc_debug(int)
538  mean. The malloc_check() efun calls the NeXT NXMallocCheck() system
539  call which does a consistency check on malloc’s data structures (this
540  consistency check is done at each malloc() and free() for certain
541  malloc_debug() levels). A non-zero return value indicates there was
542  a consistency problem. For those NeXT users wanting a bit more
543  performance out of malloc, try defining NEXT_MALLOC_DEBUG and calling the
544  malloc_debug(-1) efun (with an arg of -1). This will turn all
545  malloc debugging off and call malloc_singlethreaded() which the NeXT
546  malloc man page claims can make NeXT system malloc 10% to 15% faster.
547 
548 [NOTE: This #define has no affect on the driver if not using the
549  NeXTSTEP OS.]
550 
551 Warning: if you use a NeXT and define NEXT_MALLOC_DEBUG, be sure to
552  protect the use of the malloc_check() and malloc_debug() efuns
553  since setting certain debug levels can cause malloc() and free()
554  to become _very_ slow (protect efuns by using simul_efuns and
555  valid_override).
556 
557 [NOTE: malloc_debug(6) is a good compromise between efficiency and
558  completeness of malloc debugging (malloc/free will be about half as fast).]
559  ****************************************************************************/
560  #define NEXT_MALLOC_DEBUG
561 
562 #endif
563 
564 編譯V14的時候編譯DB
565  option.h修改下列配置
566 #define PACKAGE_DB
567  #ifdef PACKAGE_DB
568  #undef USE_MSQL /* MiniSQL, it’s small; it’s free */
569  #define USE_MYSQL 2 /* MySQL, bigger; it’s free */
570  #define DEFAULT_DB USE_MYSQL /* default database */
571  #endif      

修改 db.h 頭檔案:

 将 24 行至 37 行注釋掉,緊接着寫上你自己的 MySQL 頭檔案的位置,

find / -name mysql.h 就找到了!

 例如在 /usr/local/mysql/include/mysql.h

就寫上:

#include “/usr/local/mysql/include/mysql.h”

在源代碼目錄裡的 system_libs 檔案裡加上 mysql 連接配接庫的位置,

 例如在 /usr/local/mysql/lib

就加上:

-L/usr/local/mysql/lib -lmysqlclient