Skip to content
Snippets Groups Projects
Commit 13a6ff31 authored by Brad King's avatar Brad King
Browse files

VS: Fix WINDOWS_EXPORT_ALL_SYMBOLS for object libraries


Teach Visual Studio generators to include object files from object
libraries in the list of objects whose symbols are to be exported.
The Makefile and Ninja generators already did this.  Update the
test to cover this case.

Reported-by: default avatarBertrand Bellenot <Bertrand.Bellenot@cern.ch>
parent df14a98e
No related branches found
No related tags found
No related merge requests found
......@@ -827,6 +827,7 @@ void cmGlobalVisualStudioGenerator::AddSymbolExportCommand(
cmSystemTools::Error("could not open ", objs_file.c_str());
return;
}
std::vector<std::string> objs;
for (std::vector<cmSourceFile const*>::const_iterator it =
objectSources.begin();
it != objectSources.end(); ++it) {
......@@ -836,6 +837,12 @@ void cmGlobalVisualStudioGenerator::AddSymbolExportCommand(
// It must exist because we populated the mapping just above.
assert(!map_it->second.empty());
std::string objFile = obj_dir + map_it->second;
objs.push_back(objFile);
}
gt->UseObjectLibraries(objs, configName);
for (std::vector<std::string>::iterator it = objs.begin(); it != objs.end();
++it) {
std::string objFile = *it;
// replace $(ConfigurationName) in the object names
cmSystemTools::ReplaceString(objFile, this->GetCMakeCFGIntDir(),
configName.c_str());
......
......@@ -2,7 +2,9 @@ project(autoexport)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${autoexport_BINARY_DIR}/bin)
add_subdirectory(sub)
add_library(autoexport SHARED hello.cxx world.cxx foo.c)
add_library(objlib OBJECT objlib.c)
set_property(TARGET objlib PROPERTY POSITION_INDEPENDENT_CODE 1)
add_library(autoexport SHARED hello.cxx world.cxx foo.c $<TARGET_OBJECTS:objlib>)
add_executable(say say.cxx)
if(MSVC)
......
int objlib()
{
return 7;
}
......@@ -11,6 +11,7 @@ extern "C" {
int WINAPI foo();
// test regular C
int bar();
int objlib();
}
// test c++ functions
......@@ -39,6 +40,7 @@ int main()
foo();
printf("\n");
bar();
objlib();
printf("\n");
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment