OpenUSD icon indicating copy to clipboard operation
OpenUSD copied to clipboard

Unresolved External Symbols when trying to use custom schema & general custom schema guidance

Open msf567 opened this issue 1 year ago • 2 comments

I am trying to consume my new schema in Visual Studio, but I must be doing something wrong because I am getting unresolved external symbol errors.

Here is my schema file for reference:

#usda 1.0
(
    """InteractableMesh Schema"""
    subLayers = [
        @usdGeom\schema.usda@
    ]
)

over "GLOBAL" (
    customData = {
        string libraryName = "SC"
        string libraryPath = "./"
        string libraryPrefix = "SC"
    }
) {}

class "InteractiveMesh" (
    doc = """A mesh that can be interacted with."""
    inherits = </Gprim>
    customData = {
        string className = "IMesh"
    }
)
{
    float state = 1.0 (
        doc = "The state of the interactable mesh"
    )
}

class ComplexPrim "ComplexPrim" (
    doc = """An example of a untyped IsA schema prim"""
    # Inherits from </SimplePrim> defined in simple.usda.
    inherits = </InteractiveMesh>
    customData = {
        string className = "Complex"
    }
)  
{
    string complexString = "somethingComplex"
}

The line that is failing is: auto myComplex = pxr::SCComplex::Define(stagePtr, pxr::SdfPath("/MyComplexObject"));

The two errors: unresolved external symbol "_declspec(dllimport) public: virtual cdecl pxrInternal_v0_24__pxrReserved::SCComplex::~SCComplex(void)" (imp??1SCComplex@pxrInternal_v0_24__pxrReserved@@UEAA@XZ) referenced in function WinMain

unresolved external symbol "declspec(dllimport) public: static class pxrInternal_v0_24__pxrReserved::SCComplex cdecl pxrInternal_v0_24__pxrReserved::SCComplex::Define(class pxrInternal_v0_24__pxrReserved__::TfWeakPtr<class pxrInternal_v0_24__pxrReserved__::UsdStage> const &,class pxrInternal_v0_24__pxrReserved__::SdfPath const &)" (imp?Define@SCComplex@pxrInternal_v0_24__pxrReserved_@@SA?AV12@AEBV?$TfWeakPtr@VUsdStage@pxrInternal_v0_24__pxrReserved__@@@2@AEBVSdfPath@2@@Z) referenced in function WinMain

Some things to note:

  • I am definitely linking to the built .lib file in my visual studio project
  • My header files seem to be configured correctly (my compiler recognizes the SCComplex type just fine, and exposes the Define method)
  • Do I need to bring in the actual cpp files to my visual studio project? like "complex.cpp" etc? When I do that, I get a host of other errors, and it doesn't seem like that should be necessary because I am linking to the generated .lib file.

What am I missing? I have been trying to generate a simple schema for days, I would really appreciate some guidance here and maybe other people int he future will find this helpful.

Thanks!

msf567 avatar Jun 24 '24 18:06 msf567

Another interesting thing to note:

When I look in the generated .lib file with DUMPBIN, I don't see a lot of exported functions I would otherwise expect to.

`Dump of file A:\Brightline\Schemas\build\InteractiveMeshSchema\Release\InteractiveMeshSchema.lib

File Type: LIBRARY

 Exports

   ordinal    name

              ??0SCTokensType@pxrInternal_v0_24__pxrReserved__@@QEAA@XZ (public: __cdecl pxrInternal_v0_24__pxrReserved__::SCTokensType::SCTokensType(void))
              ?SCTokens@pxrInternal_v0_24__pxrReserved__@@3V?$TfStaticData@USCTokensType@pxrInternal_v0_24__pxrReserved__@@U?$Tf_StaticDataDefaultFactory@USCTokensType@pxrInternal_v0_24__pxrReserved__@@@2@@1@A (class pxrInternal_v0_24__pxrReserved__::TfStaticData<struct pxrInternal_v0_24__pxrReserved__::SCTokensType,struct pxrInternal_v0_24__pxrReserved__::Tf_StaticDataDefaultFactory<struct pxrInternal_v0_24__pxrReserved__::SCTokensType> > pxrInternal_v0_24__pxrReserved__::SCTokens)`
              

Is this an issue with how I am building my plugin?

for reference, my CMakeLists.txt looks like this:

set(PXR_PACKAGE InteractiveMeshSchema)

add_library(${PXR_PACKAGE} SHARED
    tokens.cpp
    wrapTokens.cpp
)

target_include_directories(${PXR_PACKAGE}
    PRIVATE
        ${PXR_INCLUDE_DIRS}
)

target_link_libraries(${PXR_PACKAGE}
    PRIVATE
        ${PXR_LIBRARIES}
)

and my build command is cmake --build . --config Release and cmake .. -DPXR_BUILD_DOCUMENTATION=OFF -DPXR_BUILD_TESTS=OFF

msf567 avatar Jun 24 '24 18:06 msf567

Filed as internal issue #USD-9802

jesschimein avatar Jun 25 '24 16:06 jesschimein

Sorry for the delay in response, are you still experiencing this issue with USD 24.11? (I would imagine so, but just want to check since we didn't get you a response sooner that maybe you'd solved it)

dgovil avatar Oct 31 '24 20:10 dgovil