PixarAnimationStudios / OpenUSD

Universal Scene Description
http://www.openusd.org
Other
6.11k stars 1.21k forks source link

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

Open msf567 opened 4 months ago

msf567 commented 4 months ago

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_24pxrReserved::SCComplex::~SCComplex(void)" (_imp??1SCComplex@pxrInternal_v0_24pxrReserved@@UEAA@XZ) referenced in function WinMain

unresolved external symbol "declspec(dllimport) public: static class pxrInternal_v0_24pxrReserved::SCComplex cdecl pxrInternal_v0_24pxrReserved::SCComplex::Define(class pxrInternal_v0_24pxrReserved::TfWeakPtr const &,class pxrInternal_v0_24pxrReserved::SdfPath const &)" (_imp?Define@SCComplex@pxrInternal_v0_24pxrReserved@@SA?AV12@AEBV?$TfWeakPtr@VUsdStage@pxrInternal_v0_24pxrReserved@@@2@AEBVSdfPath@2@@Z) referenced in function WinMain

Some things to note:

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 commented 4 months ago

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

jesschimein commented 4 months ago

Filed as internal issue #USD-9802