From 8d754ad5e74a3b0edf3f6cb9ea2db6abf5cfec74 Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Tue, 16 May 2017 15:24:03 +0200 Subject: bindexplib: Skip symbols containing a dot (.) Symbols including a dot are not valid and result in a `LNK1242` error when trying to create a library from the def file. Such symbols happen to be in object files when using PGI Fortran on Windows and compiling with debug symbols enabled. Those symbols do not need to be exported. --- Source/bindexplib.cxx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx index 691e3ae..cd1fb8a 100644 --- a/Source/bindexplib.cxx +++ b/Source/bindexplib.cxx @@ -251,13 +251,16 @@ public: SectChar = this->SectionHeaders[pSymbolTable->SectionNumber - 1] .Characteristics; - if (SectChar & IMAGE_SCN_MEM_EXECUTE) { - this->Symbols.insert(symbol); - } else if (SectChar & IMAGE_SCN_MEM_READ) { - // skip __real@ and __xmm@ - if (symbol.find("_real") == std::string::npos && - symbol.find("_xmm") == std::string::npos) { - this->DataSymbols.insert(symbol); + // skip symbols containing a dot + if (symbol.find('.') == std::string::npos) { + if (SectChar & IMAGE_SCN_MEM_EXECUTE) { + this->Symbols.insert(symbol); + } else if (SectChar & IMAGE_SCN_MEM_READ) { + // skip __real@ and __xmm@ + if (symbol.find("_real") == std::string::npos && + symbol.find("_xmm") == std::string::npos) { + this->DataSymbols.insert(symbol); + } } } } -- cgit v0.12