简体   繁体   中英

Unresolved externals despite linking in zlib.lib

I've been trying to compile an application which utilizes zlib compression in VC++ 2010.

I get the error:

error LNK2019: unresolved external symbol inflateInit2 referenced in function ...

Which wouldn't be unusual if I didn't link the lib. I link the static release zlib library.

I've managed to get this exact same configuration of libs and headers working perfectly in different solutions and hence this behavior is greatly unexpected.

Any ideas will be appreciated.

Linker command line:

/OUT:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.exe" /INCREMENTAL /NOLOGO "zlib.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\SBRapGen2.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.pdb" /SUBSYSTEM:CONSOLE /PGD:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE`

Verbose linker output:

1>------ Build started: Project: SBRapGen2, Configuration: Release Win32 ------ 1>
1> Starting pass 1 1> Processed /DEFAULTLIB:uuid.lib 1> Processed /DEFAULTLIB:msvcprt 1> Processed /DEFAULTLIB:zlib.lib 1> Processed /DEFAULTLIB:MSVCRT 1> Processed /DEFAULTLIB:OLDNAMES 1>
1> Searching libraries 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp 32.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\msvcprt.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\MSVCRT.lib: 1> Found @__security_check_cookie@4 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(secchk.obj) 1> Found __imp__sprintf 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__ceil 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__free 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__malloc 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__printf 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__fopen 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__fread 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__fwrite 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__ftell 1> Ref erenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__fseek 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__fclose 1> Referenced in SBRapGen2.obj 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found _mainCRTStartup 1> Loaded MSVCRT.lib(crtexe.obj) 1> Found ___report_gsfailure 1> Referenced in MSVCRT.lib(secchk.obj) 1> Loaded MSVCRT.lib(gs_report.obj) 1> Found ___security_cookie 1> Referenced in MSVCRT.lib(secchk.obj) 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded MSVCRT.lib(gs_cookie.obj) 1> Found __IMPORT_DESCRIPTOR_MSVCR100 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Referenced in MSVCRT.lib(MSVCR100. dll) 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___CxxSetUnhandledExceptionFilter 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(unhandld.obj) 1> Found __amsg_exit 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp____getmainargs 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __dowildcard 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(wildcard.obj) 1> Found __newmode 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(_newmode.obj) 1> Found _atexit 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(atonexit.obj) 1> Found __RTC_Terminate 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib( initsect .obj) 1> Found __imp___cexit 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp___exit 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __XcptFilt er 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp__exit 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp____initenv 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __IsNonwritableInCurrentImage 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(pesect.obj) 1> Found __initterm 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___xc_a 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(cinitexe.obj) 1> Processed /DEFAULTLIB:kernel32.lib 1> Processed /DISALLOWLIB:libcmt.lib 1> Processed /DISALLOWLIB:libcmtd.lib 1> Processed /DISALLOWLIB:msvcrtd.lib 1> Found __initterm_e 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___native_startup_state 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(natstart.obj) 1> Found __SEH_epilog4 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Refe renced in MSVCRT.lib(atonexit.obj) 1> Loaded MSVCRT.lib(sehprolg4.obj) 1> Found __except_handler4 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Referenced in MSVCRT.lib(pesect.obj) 1> Referenced in MSVCRT.lib(sehprolg4.obj) 1> Loaded MSVCRT.lib(chandler4gs.obj) 1> Found __imp___configthreadlocale 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___globallocalestatus 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(xthdloc.obj) 1> Found __setdefaultprecision 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(fp8.obj) 1> Found __imp____setusermatherr 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __matherr 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(merr.obj) 1> Found __setargv 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(dllargv.obj) 1> Found __commode 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(xncommod.ob j) 1> Found __imp___commode 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp___fmode 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __fmode 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(xtxtmode.obj) 1> Found __imp____set_app_type 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___security_init_cookie 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded MSVCRT.lib(gs_support.obj) 1> Found __crt_debugger_hook 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __NULL_IMPORT_DESCRIPTOR 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found MSVCR100_NULL_THUNK_DATA 1> Referenced in MSVCRT.lib(MSVCR100.dll) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found "void __cdecl terminate(void)" (?terminate@@YAXXZ) 1> Referenced in MSVCRT.lib(unhandld.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __unlock 1> Refe renced in MSVCRT.lib(atonexit.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found ___dllonexit 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __lock 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __imp___onexit 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __except_handler4_common 1> Referenced in MSVCRT.lib(chandler4gs.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __invoke_watson 1> Referenced in MSVCRT.lib(fp8.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Found __controlfp_s 1> Referenced in MSVCRT.lib(fp8.obj) 1> Loaded MSVCRT.lib(MSVCR100.dll) 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib: 1> Found __imp__InterlockedExchange@8 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded kernel32.l ib(KERNEL32.dll) 1> Found __imp__Sleep@4 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__InterlockedCompareExchange@12 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__HeapSetInformation@16 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__EncodePointer@4 1> Referenced in MSVCRT.lib(crtexe.obj) 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__TerminateProcess@8 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__GetCurrentProcess@0 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__UnhandledExceptionFilter@4 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__SetUnhandledExceptionFilter@4 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Referenced in MSVCRT.lib(unhandld.obj) 1> Loade d kernel32.lib(KERNEL32.dll) 1> Found __imp__IsDebuggerPresent@0 1> Referenced in MSVCRT.lib(gs_report.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__DecodePointer@4 1> Referenced in MSVCRT.lib(atonexit.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__QueryPerformanceCounter@4 1> Referenced in MSVCRT.lib(gs_support.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__GetTickCount@0 1> Referenced in MSVCRT.lib(gs_support.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__GetCurrentThreadId@0 1> Referenced in MSVCRT.lib(gs_support.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__GetCurrentProcessId@0 1> Referenced in MSVCRT.lib(gs_support.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __imp__GetSystemTimeAsFileTime@4 1> Referenced in MSVCRT.lib(gs_support.obj) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found __IMPORT_DESCRIPTOR_KERNEL32 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel 32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Found KERNEL32_NULL_THUNK_DATA 1> Referenced in kernel32.lib(KERNEL32.dll) 1> Loaded kernel32.lib(KERNEL32.dll) 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib: 1> Searching C:\Program Files \Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib: 1> Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\msvcprt.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\MSVCRT.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib: 1> Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib: 1>
1> Finished searching libraries 1>
1> Finished pass 1 1>
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _deflateEnd 1>SBRapGen2.obj : error LNK2001: unresolved external symbol inflateInit2 1>SBRapGen2.obj : error LNK2001: unresolved external symbol _inflate 1>SBRapGen2.obj : error LNK2001: unresolved external symbol _inflateEnd 1>SBRapGen2.obj : error LNK2001: unresolved external symbol _deflate 1>SBRapGen2.obj : error LNK2001: unresolved external symbol deflateInit2

If you are using the VS2010 solution provided in contrib/ be aware that it's bugged. The zlibstat project defines ZLIB_WINAPI which according to zlib FAQ is used to switch on the STDCALL convention. Just remove it from the project settings and recompile the lib.

In my case I amended

  • Config -> Linker -> Input -> Additional Dependencies

to read ucrt.lib;vcruntime.lib;msvcrt.lib;kernel32.lib

This enabled libz to build under Windows 10 with VS2015

Ensuring the build type was /MD

This was also the case if building for libpng (that requires zlib), the same modifications enable successful building with the old included default 'projects' files.

Found this link to be helpful to me. Worked like a charm:

http://www.tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall/

就我而言,在 vs2017 中使用NuGet安装zlib-vc140-static-64 (v1.2.11) 或zlib_native (v1.2.11)。

A few shot-in-the-dark suggestions:

Try running dumpbin /symbols zlib.lib to see if the symbols in that lib are as you expect (ie., is inflateInit2 in there?).

If the build is currently relying on a lib path search to locate zlib.lib , try specifying the full absolute path to the library to rule out the linker finding some stale zlib library somewhere else on your system.

Also, post the command line used for the linker (from the build log file).

Update:

You can see behavior like this if you're accidentally mixing 32-bit and 64-bit components (ie., the zlib.lib file is built for x86 and the application is being built for x64). The linker doesn't complain about not finding the lib file, nor does it complain that the objects in the lib file are for a different platform. Given that your error message mentions a symbol without any decoration, I'd bet that the linker is building an x64 application, but maybe the zlib.lib has x86 objects (and therefore there's a symbol named _inflateInit2 in there, decorated with an underscore or maybe something else).

(as an aside - I wonder if it's possible to mix x86 and x64 objects in the same lib file as long as the have different names. Not that I want to actually do this).

Did you verify that your zlib function prototypes are in an extern "C" block? If not, then the linker will be looking for functions with C++-mangled names, while zlib.lib will contain the unmangled C names.

I ran into the same problem myself using Visual Studio 2017. I got error messages like:

error LNK2019: unresolved external symbol __imp__deflate referenced in function 
error LNK2019: unresolved external symbol __imp__deflateEnd referenced in function 
error LNK2019: unresolved external symbol __imp__inflate referenced in function 
error LNK2019: unresolved external symbol __imp__inflateEnd referenced in function 
error LNK2019: unresolved external symbol __imp__deflateInit2_ referenced in function
error LNK2019: unresolved external symbol __imp__inflateInit2_ referenced in function

I followed the tip from Michael Burr, checking if the zlib file I had contained these methods:

dumpbin /symbols zlib.lib

The output showed the methods were there , yet Visual Studio still complained. Ultimately I downloaded the latest stable release of zlib from their github repository, and then compiled it (using a Visual Studio Developer Console). Their instructions were not directly helpful though eventually I found their MS Makefile which contained the command I needed to run.

nmake -f win32/Makefile.msc

Have a look inside their win32/Makefile.msc file for more information on the building process.

The build process generated two .lib files. What I really needed in my project was the one called ' zdll.lib '. (See their documentation file DLL_FAQ.txt for info on it). Back inside Visual Studio, I had to manually add the file to my project ( NOT using the Linker --> General --> Additional Library Directories method, since this triggered the other problems.) You can add them by Right-Clicking on the Solution Object (Not the topmost item in the list, but the second item. In the picture below, my project is called Lasso, so you would want to click on the equivalent in your project.)

Go to: Add --> Existing Item...

Then select the generated zdll.lib file.

Lib files explicitly added to Visual Studio project

我发现它在Win32版本中链接OK但不是x64。

You compiled the zlib static library using something other than VC++ 2010?

Is this a recent upgrade from VS2008/05?

Have you tried recompiling the static library using the 2010 toolset?

Be aware that the order of the libraries matters. Suppose you want to link A.OBJ, B.LIB, and C.LIB, with the input files specified in this order. If C.LIB calls a function in B.LIB, it won't be found (unless it was already fortuitously called from A.OBJ).
Could this be the source of your problem?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM