nmwsharp / nmwsharp/polyscope

Building Polyscope as a shared library on Windows

Open
#330 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
2.2k
Forks
242
Avg merge
11m
Merged PRs (30d)
1

Description

On Windows, I managed to build polyscope as a shared library with a couple of changes:

  1. Export all symbols for polyscope
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -374,4 +374,7 @@
 set_target_properties(polyscope PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
 add_definitions(-DNOMINMAX)
+set_target_properties(polyscope PROPERTIES
+  WINDOWS_EXPORT_ALL_SYMBOLS ON
+)
 
 # Include settings
  1. Force imgui as static. Again, it would search for a .lib file but no symbols are exported.
--- a/deps/imgui/CMakeLists.txt
+++ b/deps/imgui/CMakeLists.txt
@@ -63,5 +63,5 @@
 
   add_library(
-          imgui
+          imgui STATIC
           ${SRCS}
           )

Alternative: Export all symbols like 1.

  1. Force stb as static. Otherwise, it would search for a non-existent .lib file because no symbols are exported.
--- a/deps/stb/CMakeLists.txt
+++ b/deps/stb/CMakeLists.txt
@@ -1,5 +1,5 @@
 # Create a library for the viewer code
 add_library(
-    stb
+    stb STATIC
     stb_impl.cpp
 )

I tried exporting all symbols but it did not work. I would get missing symbols:

[build] screenshot.cpp.obj : error LNK2001: unresolved external symbol "int stbi_write_png_compression_level" (?stbi_write_png_compression_level@@3HA)
  1. Tell glm to not build a library. It is header-only anyway:
set(GLM_BUILD_LIBRARY OFF CACHE BOOL "Use GLM as header-only" FORCE)

It is not optimal to export all symbols on Windows, but it works. Dropping this here for others to use.

Open to make a PR but I would rather figure out the approved method first 😄

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the shared-library target in src/CMakeLists.txt, then inspect deps/imgui/CMakeLists.txt and deps/stb/CMakeLists.txt alongside the GLM build setting. Run the Windows shared-library build and determine the approved dependency/export configuration; done means it links without unresolved symbols.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, cpp
Domain
build-system, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.