Skip to content

Commit 910748f

Browse files
mstorsjotru
authored andcommitted
[clang-repl] Fix BUILD_SHARED_LIBS symbols from libclangInterpreter on MinGW (#71393)
A few symbols within libclangInterpreter have got explicit dllexport attributes, in order to make them exported (and thus visible at runtime) in any build, not only when they are part of e.g. a DLL libclang-cpp, but also when they are part of a plain .exe. Due to the explicit dllexports, these symbols would sidestep the regular MinGW logic of exporting all symbols if there are no dllexports. Therefore, for libclang-cpp, a separate fix was made in 592e935, to pass --export-all-symbols to the build of libclang-cpp. If building with BUILD_SHARED_LIBS enabled, then the same issue appears in libclangInterpreter; pass the same flag --export-all-symbols there as well, to make sure all symbols are visible, not only the ones that are explicitly marked as dllexport. (cherry picked from commit 0d3eeac)
1 parent 582f046 commit 910748f

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

clang/lib/Interpreter/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,14 @@ add_clang_library(clangInterpreter
3636
clangSema
3737
clangSerialization
3838
)
39+
40+
if ((MINGW OR CYGWIN) AND BUILD_SHARED_LIBS)
41+
# The DLLs are supposed to export all symbols (except for ones that are
42+
# explicitly hidden). Normally, this is what happens anyway, but if there
43+
# are symbols that are marked explicitly as dllexport, we'd only export them
44+
# and nothing else. The Interpreter contains a few cases of such dllexports
45+
# (for symbols that need to be exported even from standalone exe files);
46+
# therefore, add --export-all-symbols to make sure we export all symbols
47+
# despite potential dllexports.
48+
target_link_options(clangInterpreter PRIVATE LINKER:--export-all-symbols)
49+
endif()

0 commit comments

Comments
 (0)