1 // (C) Copyright John Maddock 2003. 2 // Use, modification and distribution are subject to the 3 // Boost Software License, Version 1.0. (See accompanying file 4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 /* 7 * LOCATION: see http://www.boost.org for most recent version. 8 * FILE auto_link.hpp 9 * VERSION see <boost/version.hpp> 10 * DESCRIPTION: Automatic library inclusion for Borland/Microsoft compilers. 11 */ 12 13 /************************************************************************* 14 15 USAGE: 16 ~~~~~~ 17 18 Before including this header you must define one or more of define the following macros: 19 20 BOOST_LIB_NAME: Required: A string containing the basename of the library, 21 for example boost_regex. 22 BOOST_LIB_TOOLSET: Optional: the base name of the toolset. 23 BOOST_DYN_LINK: Optional: when set link to dll rather than static library. 24 BOOST_LIB_DIAGNOSTIC: Optional: when set the header will print out the name 25 of the library selected (useful for debugging). 26 BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib, 27 rather than a mangled-name version. 28 BOOST_AUTO_LINK_TAGGED: Specifies that we link to libraries built with the --layout=tagged option. 29 This is essentially the same as the default name-mangled version, but without 30 the compiler name and version, or the Boost version. Just the build options. 31 BOOST_AUTO_LINK_SYSTEM: Specifies that we link to libraries built with the --layout=system option. 32 This is essentially the same as the non-name-mangled version, but with 33 the prefix to differentiate static and dll builds 34 35 These macros will be undef'ed at the end of the header, further this header 36 has no include guards - so be sure to include it only once from your library! 37 38 Algorithm: 39 ~~~~~~~~~~ 40 41 Libraries for Borland and Microsoft compilers are automatically 42 selected here, the name of the lib is selected according to the following 43 formula: 44 45 BOOST_LIB_PREFIX 46 + BOOST_LIB_NAME 47 + "_" 48 + BOOST_LIB_TOOLSET 49 + BOOST_LIB_THREAD_OPT 50 + BOOST_LIB_RT_OPT 51 + BOOST_LIB_ARCH_AND_MODEL_OPT 52 "-" 53 + BOOST_LIB_VERSION 54 + BOOST_LIB_SUFFIX 55 56 These are defined as: 57 58 BOOST_LIB_PREFIX: "lib" for static libraries otherwise "". 59 60 BOOST_LIB_NAME: The base name of the lib ( for example boost_regex). 61 62 BOOST_LIB_TOOLSET: The compiler toolset name (vc6, vc7, bcb5 etc). 63 64 BOOST_LIB_THREAD_OPT: "-mt" for multithread builds, otherwise nothing. 65 66 BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used, 67 contains one or more of the following letters after 68 a hyphen: 69 70 s static runtime (dynamic if not present). 71 g debug/diagnostic runtime (release if not present). 72 y Python debug/diagnostic runtime (release if not present). 73 d debug build (release if not present). 74 p STLport build. 75 n STLport build without its IOStreams. 76 77 BOOST_LIB_ARCH_AND_MODEL_OPT: The architecture and address model 78 (-x32 or -x64 for x86/32 and x86/64 respectively) 79 80 BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. 81 82 BOOST_LIB_SUFFIX: Static/import libraries extension (".lib", ".a") for the compiler. 83 84 ***************************************************************************/ 85 86 #ifdef __cplusplus 87 # ifndef BOOST_CONFIG_HPP 88 # include <boost/config.hpp> 89 # endif 90 #elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__) 91 // 92 // C language compatability (no, honestly) 93 // 94 # define BOOST_MSVC _MSC_VER 95 # define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) 96 # define BOOST_DO_STRINGIZE(X) #X 97 #endif 98 // 99 // Only include what follows for known and supported compilers: 100 // 101 #if defined(BOOST_MSVC) \ 102 || defined(BOOST_EMBTC_WINDOWS) \ 103 || defined(BOOST_BORLANDC) \ 104 || (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \ 105 || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \ 106 || (defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4)) 107 108 #ifndef BOOST_VERSION_HPP 109 # include <boost/version.hpp> 110 #endif 111 112 #ifndef BOOST_LIB_NAME 113 # error "Macro BOOST_LIB_NAME not set (internal error)" 114 #endif 115 116 // 117 // error check: 118 // 119 #if defined(__MSVC_RUNTIME_CHECKS) && !defined(_DEBUG) 120 # pragma message("Using the /RTC option without specifying a debug runtime will lead to linker errors") 121 # pragma message("Hint: go to the code generation options and switch to one of the debugging runtimes") 122 # error "Incompatible build options" 123 #endif 124 // 125 // select toolset if not defined already: 126 // 127 #ifndef BOOST_LIB_TOOLSET 128 # if defined(BOOST_MSVC) && (BOOST_MSVC < 1200) 129 // Note: no compilers before 1200 are supported 130 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1300) 131 132 # ifdef UNDER_CE 133 // eVC4: 134 # define BOOST_LIB_TOOLSET "evc4" 135 # else 136 // vc6: 137 # define BOOST_LIB_TOOLSET "vc6" 138 # endif 139 140 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1310) 141 142 // vc7: 143 # define BOOST_LIB_TOOLSET "vc7" 144 145 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1400) 146 147 // vc71: 148 # define BOOST_LIB_TOOLSET "vc71" 149 150 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1500) 151 152 // vc80: 153 # define BOOST_LIB_TOOLSET "vc80" 154 155 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1600) 156 157 // vc90: 158 # define BOOST_LIB_TOOLSET "vc90" 159 160 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1700) 161 162 // vc10: 163 # define BOOST_LIB_TOOLSET "vc100" 164 165 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800) 166 167 // vc11: 168 # define BOOST_LIB_TOOLSET "vc110" 169 170 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1900) 171 172 // vc12: 173 # define BOOST_LIB_TOOLSET "vc120" 174 175 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1910) 176 177 // vc14: 178 # define BOOST_LIB_TOOLSET "vc140" 179 180 # elif defined(BOOST_MSVC) && (BOOST_MSVC < 1920) 181 182 // vc14.1: 183 # define BOOST_LIB_TOOLSET "vc141" 184 185 # elif defined(BOOST_MSVC) 186 187 // vc14.2: 188 # define BOOST_LIB_TOOLSET "vc142" 189 190 # elif defined(BOOST_EMBTC_WINDOWS) 191 192 // Embarcadero Clang based compilers: 193 # if defined(BOOST_EMBTC_WIN32C) 194 # define BOOST_LIB_TOOLSET "bcb32" 195 # elif defined(BOOST_EMBTC_WIN64) 196 # define BOOST_LIB_TOOLSET "bcb64" 197 # endif 198 199 # elif defined(BOOST_BORLANDC) 200 201 // CBuilder 6: 202 # define BOOST_LIB_TOOLSET "bcb" 203 204 # elif defined(__ICL) 205 206 // Intel C++, no version number: 207 # define BOOST_LIB_TOOLSET "iw" 208 209 # elif defined(__MWERKS__) && (__MWERKS__ <= 0x31FF ) 210 211 // Metrowerks CodeWarrior 8.x 212 # define BOOST_LIB_TOOLSET "cw8" 213 214 # elif defined(__MWERKS__) && (__MWERKS__ <= 0x32FF ) 215 216 // Metrowerks CodeWarrior 9.x 217 # define BOOST_LIB_TOOLSET "cw9" 218 219 # elif defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4) 220 221 // Clang on Windows 222 # define BOOST_LIB_TOOLSET "clangw" BOOST_STRINGIZE(__clang_major__) 223 224 # endif 225 #endif // BOOST_LIB_TOOLSET 226 227 // 228 // select thread opt: 229 // 230 #if defined(_MT) || defined(__MT__) 231 # define BOOST_LIB_THREAD_OPT "-mt" 232 #else 233 # define BOOST_LIB_THREAD_OPT 234 #endif 235 236 #if defined(_MSC_VER) || defined(__MWERKS__) 237 238 # ifdef _DLL 239 240 # if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) 241 242 # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\ 243 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 244 # define BOOST_LIB_RT_OPT "-gydp" 245 # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) 246 # define BOOST_LIB_RT_OPT "-gdp" 247 # elif defined(_DEBUG)\ 248 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 249 # define BOOST_LIB_RT_OPT "-gydp" 250 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 251 # error "Build options aren't compatible with pre-built libraries" 252 # elif defined(_DEBUG) 253 # define BOOST_LIB_RT_OPT "-gdp" 254 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 255 # error "Build options aren't compatible with pre-built libraries" 256 # else 257 # define BOOST_LIB_RT_OPT "-p" 258 # endif 259 260 # elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) 261 262 # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\ 263 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 264 # define BOOST_LIB_RT_OPT "-gydpn" 265 # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) 266 # define BOOST_LIB_RT_OPT "-gdpn" 267 # elif defined(_DEBUG)\ 268 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 269 # define BOOST_LIB_RT_OPT "-gydpn" 270 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 271 # error "Build options aren't compatible with pre-built libraries" 272 # elif defined(_DEBUG) 273 # define BOOST_LIB_RT_OPT "-gdpn" 274 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 275 # error "Build options aren't compatible with pre-built libraries" 276 # else 277 # define BOOST_LIB_RT_OPT "-pn" 278 # endif 279 280 # else 281 282 # if defined(_DEBUG) && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 283 # define BOOST_LIB_RT_OPT "-gyd" 284 # elif defined(_DEBUG) 285 # define BOOST_LIB_RT_OPT "-gd" 286 # else 287 # define BOOST_LIB_RT_OPT 288 # endif 289 290 # endif 291 292 # else 293 294 # if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && (defined(_STLP_OWN_IOSTREAMS) || defined(__STL_OWN_IOSTREAMS)) 295 296 # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\ 297 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 298 # define BOOST_LIB_RT_OPT "-sgydp" 299 # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) 300 # define BOOST_LIB_RT_OPT "-sgdp" 301 # elif defined(_DEBUG)\ 302 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 303 # define BOOST_LIB_RT_OPT "-sgydp" 304 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 305 # error "Build options aren't compatible with pre-built libraries" 306 # elif defined(_DEBUG) 307 # define BOOST_LIB_RT_OPT "-sgdp" 308 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 309 # error "Build options aren't compatible with pre-built libraries" 310 # else 311 # define BOOST_LIB_RT_OPT "-sp" 312 # endif 313 314 # elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION) 315 316 # if defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG))\ 317 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 318 # define BOOST_LIB_RT_OPT "-sgydpn" 319 # elif defined(_DEBUG) && (defined(__STL_DEBUG) || defined(_STLP_DEBUG)) 320 # define BOOST_LIB_RT_OPT "-sgdpn" 321 # elif defined(_DEBUG)\ 322 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 323 # define BOOST_LIB_RT_OPT "-sgydpn" 324 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 325 # error "Build options aren't compatible with pre-built libraries" 326 # elif defined(_DEBUG) 327 # define BOOST_LIB_RT_OPT "-sgdpn" 328 # pragma message("warning: STLport debug versions are built with /D_STLP_DEBUG=1") 329 # error "Build options aren't compatible with pre-built libraries" 330 # else 331 # define BOOST_LIB_RT_OPT "-spn" 332 # endif 333 334 # else 335 336 # if defined(_DEBUG)\ 337 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 338 # define BOOST_LIB_RT_OPT "-sgyd" 339 # elif defined(_DEBUG) 340 # define BOOST_LIB_RT_OPT "-sgd" 341 # else 342 # define BOOST_LIB_RT_OPT "-s" 343 # endif 344 345 # endif 346 347 # endif 348 349 #elif defined(BOOST_EMBTC_WINDOWS) 350 351 # ifdef _RTLDLL 352 353 # if defined(_DEBUG) 354 # define BOOST_LIB_RT_OPT "-d" 355 # else 356 # define BOOST_LIB_RT_OPT 357 # endif 358 359 # else 360 361 # if defined(_DEBUG) 362 # define BOOST_LIB_RT_OPT "-sd" 363 # else 364 # define BOOST_LIB_RT_OPT "-s" 365 # endif 366 367 # endif 368 369 #elif defined(BOOST_BORLANDC) 370 371 // 372 // figure out whether we want the debug builds or not: 373 // 374 #if BOOST_BORLANDC > 0x561 375 #pragma defineonoption BOOST_BORLAND_DEBUG -v 376 #endif 377 // 378 // sanity check: 379 // 380 #if defined(__STL_DEBUG) || defined(_STLP_DEBUG) 381 #error "Pre-built versions of the Boost libraries are not provided in STLport-debug form" 382 #endif 383 384 # ifdef _RTLDLL 385 386 # if defined(BOOST_BORLAND_DEBUG)\ 387 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 388 # define BOOST_LIB_RT_OPT "-yd" 389 # elif defined(BOOST_BORLAND_DEBUG) 390 # define BOOST_LIB_RT_OPT "-d" 391 # elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 392 # define BOOST_LIB_RT_OPT "-y" 393 # else 394 # define BOOST_LIB_RT_OPT 395 # endif 396 397 # else 398 399 # if defined(BOOST_BORLAND_DEBUG)\ 400 && defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 401 # define BOOST_LIB_RT_OPT "-syd" 402 # elif defined(BOOST_BORLAND_DEBUG) 403 # define BOOST_LIB_RT_OPT "-sd" 404 # elif defined(BOOST_DEBUG_PYTHON) && defined(BOOST_LINKING_PYTHON) 405 # define BOOST_LIB_RT_OPT "-sy" 406 # else 407 # define BOOST_LIB_RT_OPT "-s" 408 # endif 409 410 # endif 411 412 #endif 413 414 // 415 // BOOST_LIB_ARCH_AND_MODEL_OPT 416 // 417 418 #if defined( _M_IX86 ) 419 # define BOOST_LIB_ARCH_AND_MODEL_OPT "-x32" 420 #elif defined( _M_X64 ) 421 # define BOOST_LIB_ARCH_AND_MODEL_OPT "-x64" 422 #elif defined( _M_ARM ) 423 # define BOOST_LIB_ARCH_AND_MODEL_OPT "-a32" 424 #elif defined( _M_ARM64 ) 425 # define BOOST_LIB_ARCH_AND_MODEL_OPT "-a64" 426 #endif 427 428 // 429 // select linkage opt: 430 // 431 #if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK) 432 # define BOOST_LIB_PREFIX 433 #elif defined(BOOST_DYN_LINK) 434 # error "Mixing a dll boost library with a static runtime is a really bad idea..." 435 #else 436 # define BOOST_LIB_PREFIX "lib" 437 #endif 438 439 // 440 // now include the lib: 441 // 442 #if defined(BOOST_LIB_NAME) \ 443 && defined(BOOST_LIB_PREFIX) \ 444 && defined(BOOST_LIB_TOOLSET) \ 445 && defined(BOOST_LIB_THREAD_OPT) \ 446 && defined(BOOST_LIB_RT_OPT) \ 447 && defined(BOOST_LIB_ARCH_AND_MODEL_OPT) \ 448 && defined(BOOST_LIB_VERSION) 449 450 #if defined(BOOST_EMBTC_WIN64) 451 # define BOOST_LIB_SUFFIX ".a" 452 #else 453 # define BOOST_LIB_SUFFIX ".lib" 454 #endif 455 456 #ifdef BOOST_AUTO_LINK_NOMANGLE 457 # pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX) 458 # ifdef BOOST_LIB_DIAGNOSTIC 459 # pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX) 460 # endif 461 #elif defined(BOOST_AUTO_LINK_TAGGED) 462 # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT BOOST_LIB_SUFFIX) 463 # ifdef BOOST_LIB_DIAGNOSTIC 464 # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT BOOST_LIB_SUFFIX) 465 # endif 466 #elif defined(BOOST_AUTO_LINK_SYSTEM) 467 # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX) 468 # ifdef BOOST_LIB_DIAGNOSTIC 469 # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_SUFFIX) 470 # endif 471 #elif defined(BOOST_LIB_BUILDID) 472 # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) BOOST_LIB_SUFFIX) 473 # ifdef BOOST_LIB_DIAGNOSTIC 474 # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) BOOST_LIB_SUFFIX) 475 # endif 476 #else 477 # pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION BOOST_LIB_SUFFIX) 478 # ifdef BOOST_LIB_DIAGNOSTIC 479 # pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION BOOST_LIB_SUFFIX) 480 # endif 481 #endif 482 483 #else 484 # error "some required macros where not defined (internal logic error)." 485 #endif 486 487 488 #endif // _MSC_VER || __BORLANDC__ 489 490 // 491 // finally undef any macros we may have set: 492 // 493 #ifdef BOOST_LIB_PREFIX 494 # undef BOOST_LIB_PREFIX 495 #endif 496 #if defined(BOOST_LIB_NAME) 497 # undef BOOST_LIB_NAME 498 #endif 499 // Don't undef this one: it can be set by the user and should be the 500 // same for all libraries: 501 //#if defined(BOOST_LIB_TOOLSET) 502 //# undef BOOST_LIB_TOOLSET 503 //#endif 504 #if defined(BOOST_LIB_THREAD_OPT) 505 # undef BOOST_LIB_THREAD_OPT 506 #endif 507 #if defined(BOOST_LIB_RT_OPT) 508 # undef BOOST_LIB_RT_OPT 509 #endif 510 #if defined(BOOST_LIB_ARCH_AND_MODEL_OPT) 511 # undef BOOST_LIB_ARCH_AND_MODEL_OPT 512 #endif 513 #if defined(BOOST_LIB_LINK_OPT) 514 # undef BOOST_LIB_LINK_OPT 515 #endif 516 #if defined(BOOST_LIB_DEBUG_OPT) 517 # undef BOOST_LIB_DEBUG_OPT 518 #endif 519 #if defined(BOOST_DYN_LINK) 520 # undef BOOST_DYN_LINK 521 #endif 522 #if defined(BOOST_LIB_SUFFIX) 523 # undef BOOST_LIB_SUFFIX 524 #endif 525