https://bugreports.qt.io/browse/QBS-1522
> 29 нояб. 2019 г., в 08:03, Dan Pat <danni...@gmail.com> написал(а): > > > Who imposes that requirement and why? > Ok. Here's the thing. The project I am working on is based on Qt library and > consists of a bunch of libraries and executables with dependencies between > them expressed via a "Depends" language item. Plus there a number of > pre-built third-party libraries wrapped in Modules that some of the Products > within the project depend on. The project compiles and links and I can run > the executables just fine. Now comes Asan. We use a dynamic version of Asan, > since the CRT we use is dynamic (compilation with /MD option) . The first > step was to compile the project with sanitiser support. I managed that, but I > when tried to to run one of the tests, Asan reported an error. I did a bit of > research and figured out that the error was detected early on during > initialization of Qt DLLs. From what I have been able to find out from > Internet sources and through a bit of testing I concluded that for the > sanitizer to work properly, the asan.dll must be loaded before any other DLL > in the process, specifically before the C runtime library, because it needs > to do some hotpatching in order to be able trace every heap allocation call. > In my case, seemingly, the asan.dll was loaded somewhere in the middle of the > DLL loading sequence when some of the heap allocation has already been done > resulting in a false error report. My research revealed that in order for the > asan.dll to be loaded first, its import record in the binary IAT must come > first, and for the import record to come first the corresponding import > library must come first on the linker's list of imports. The asan library is > contained in a Module, and I have no idea how to get its import to the > beginning of the linker's list. Let's consider an example Product. Looking at > an issued linker command: Module dependencies are listed after any Product > dependencies, any libraries specified directly in cpp.dynamicLibraries (as an > experiment, we normally use Depends) come before Module dependencies but > after any Product dependencies, any cpp,linkerFlags (tried as a last resort) > go the end of the linker's arguments string. I hope I have made myself > clear, thank you. > > чт, 28 нояб. 2019 г. в 21:37, Иван Комиссаров <abba...@gmail.com > <mailto:abba...@gmail.com>>: > It’s worth mentioning, that compiling with verbose flag can give some insight > on what libraries/options clang-cl passes to the linker: > > clang-cl -v -fsanitize=address main.cpp > > Иван Комиссаров > >> 28 нояб. 2019 г., в 17:23, Иван Комиссаров <abba...@gmail.com >> <mailto:abba...@gmail.com>> написал(а): >> >> I did a small research and was able to compile a small example with >> clang-cl and asan. >> Here are the flags I had to set manually: >> >> cpp.optimization: "none" >> cpp.cxxFlags: [ >> "/MT", >> "-fsanitize=address", >> ] >> cpp.linkerFlags: [ >> >> "-wholearchive:C:\\Developer\\LLVM\\lib\\clang\\8.0.0\\lib\\windows\\clang_rt.asan-x86_64.lib", >> >> "-wholearchive:C:\\Developer\\LLVM\\lib\\clang\\8.0.0\\lib\\windows\\clang_rt.asan_cxx-x86_64.lib", >> ] >> cpp.staticLibraries: [ >> >> "C:\\Developer\\LLVM\\lib\\clang\\8.0.0\\lib\\windows\\clang_rt.asan-x86_64.lib", >> >> "C:\\Developer\\LLVM\\lib\\clang\\8.0.0\\lib\\windows\\clang_rt.asan_cxx-x86_64.lib", >> ] >> >> Probably, we should add some support for that in Qbs... >> The problem is that qbs calls the linker directly (which is not the same >> clang-cl uses), maybe it’s worth using clang-cl for linking... or just add >> support for the usual clang with msvc ABI (I have plans for that for 1.16) >> >> Иван Комиссаров >> >>> 28 нояб. 2019 г., в 15:53, Christian Kandeler <christian.kande...@qt.io >>> <mailto:christian.kande...@qt.io>> написал(а): >>> >>> On Thu, 28 Nov 2019 18:58:54 +0500 >>> Dan Pat <danni...@gmail.com <mailto:danni...@gmail.com>> wrote: >>> >>>> Hello. I am trying to use Asan in my project (windows 10, clang-cl). >>>> There's a requirement for the Asan import library to appear first in the >>>> linker's list of import libraries. >>> >>> Who imposes that requirement and why? >>> >>>> I cannot seem to find a way to achieve this with qbs. Any suggestions? >>> >>> If you are sure it's really, really needed, you can use a Properties item >>> in your product with e.g. cpp.dynamicLibraries >>> (https://doc.qt.io/qbs/qml-qbslanguageitems-properties.html#overrideListProperties-prop >>> >>> <https://doc.qt.io/qbs/qml-qbslanguageitems-properties.html#overrideListProperties-prop>), >>> but then you will have to list *all* libraries there. >>> >>> >>> Christian >>> _______________________________________________ >>> Qbs mailing list >>> Qbs@qt-project.org <mailto:Qbs@qt-project.org> >>> https://lists.qt-project.org/listinfo/qbs >>> <https://lists.qt-project.org/listinfo/qbs> > _______________________________________________ > Qbs mailing list > Qbs@qt-project.org <mailto:Qbs@qt-project.org> > https://lists.qt-project.org/listinfo/qbs > <https://lists.qt-project.org/listinfo/qbs>
_______________________________________________ Qbs mailing list Qbs@qt-project.org https://lists.qt-project.org/listinfo/qbs