Giter VIP home page Giter VIP logo

Comments (13)

NickGerleman avatar NickGerleman commented on May 23, 2024

It’s hard to tell what the issue is with the limited error output.

Instead of changing yogacore to be either a shared or static library, it might be easier to link the static library into a new shared library. As a reference, the JNI bindings do just this, and link in some more code which is binding specific to a final libyoga.so. https://github.com/facebook/yoga/blob/main/java/CMakeLists.txt.

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

I was able to get this buy using make VERBOSE=1 and it looks like a linking error related to the undefined reference to YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)

[ 90%] Building CXX object tests/CMakeFiles/yogatests.dir/generated/YGRoundingTest.cpp.o
cd /home/sstarr/Downloads/yoga-2.0.0/build/tests && /usr/bin/c++  -I/home/sstarr/Downloads/yoga-2.0.0/yoga/.. -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest/include -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest -fPIE -fvisibility=hidden -fno-omit-frame-pointer -fexceptions -Wall -Wextra -Werror -fno-rtti -std=gnu++14 -MD -MT tests/CMakeFiles/yogatests.dir/generated/YGRoundingTest.cpp.o -MF CMakeFiles/yogatests.dir/generated/YGRoundingTest.cpp.o.d -o CMakeFiles/yogatests.dir/generated/YGRoundingTest.cpp.o -c /home/sstarr/Downloads/yoga-2.0.0/tests/generated/YGRoundingTest.cpp
[ 91%] Building CXX object tests/CMakeFiles/yogatests.dir/generated/YGSizeOverflowTest.cpp.o
cd /home/sstarr/Downloads/yoga-2.0.0/build/tests && /usr/bin/c++  -I/home/sstarr/Downloads/yoga-2.0.0/yoga/.. -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest/include -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest -fPIE -fvisibility=hidden -fno-omit-frame-pointer -fexceptions -Wall -Wextra -Werror -fno-rtti -std=gnu++14 -MD -MT tests/CMakeFiles/yogatests.dir/generated/YGSizeOverflowTest.cpp.o -MF CMakeFiles/yogatests.dir/generated/YGSizeOverflowTest.cpp.o.d -o CMakeFiles/yogatests.dir/generated/YGSizeOverflowTest.cpp.o -c /home/sstarr/Downloads/yoga-2.0.0/tests/generated/YGSizeOverflowTest.cpp
[ 92%] Building CXX object tests/CMakeFiles/yogatests.dir/util/TestUtil.cpp.o
cd /home/sstarr/Downloads/yoga-2.0.0/build/tests && /usr/bin/c++  -I/home/sstarr/Downloads/yoga-2.0.0/yoga/.. -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest/include -isystem /home/sstarr/Downloads/yoga-2.0.0/build/_deps/googletest-src/googletest -fPIE -fvisibility=hidden -fno-omit-frame-pointer -fexceptions -Wall -Wextra -Werror -fno-rtti -std=gnu++14 -MD -MT tests/CMakeFiles/yogatests.dir/util/TestUtil.cpp.o -MF CMakeFiles/yogatests.dir/util/TestUtil.cpp.o.d -o CMakeFiles/yogatests.dir/util/TestUtil.cpp.o -c /home/sstarr/Downloads/yoga-2.0.0/tests/util/TestUtil.cpp
[ 94%] Linking CXX executable yogatests
cd /home/sstarr/Downloads/yoga-2.0.0/build/tests && /usr/bin/cmake -E cmake_link_script CMakeFiles/yogatests.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/yogatests.dir/BitUtilsTest.cpp.o CMakeFiles/yogatests.dir/CompactValueTest.cpp.o CMakeFiles/yogatests.dir/EventsTest.cpp.o CMakeFiles/yogatests.dir/YGAlignBaselineTest.cpp.o CMakeFiles/yogatests.dir/YGAspectRatioTest.cpp.o CMakeFiles/yogatests.dir/YGBaselineFuncTest.cpp.o CMakeFiles/yogatests.dir/YGComputedMarginTest.cpp.o CMakeFiles/yogatests.dir/YGComputedPaddingTest.cpp.o CMakeFiles/yogatests.dir/YGDefaultValuesTest.cpp.o CMakeFiles/yogatests.dir/YGDirtiedTest.cpp.o CMakeFiles/yogatests.dir/YGDirtyMarkingTest.cpp.o CMakeFiles/yogatests.dir/YGEdgeTest.cpp.o CMakeFiles/yogatests.dir/YGFloatOptionalTest.cpp.o CMakeFiles/yogatests.dir/YGHadOverflowTest.cpp.o CMakeFiles/yogatests.dir/YGLoggerTest.cpp.o CMakeFiles/yogatests.dir/YGMeasureCacheTest.cpp.o CMakeFiles/yogatests.dir/YGMeasureModeTest.cpp.o CMakeFiles/yogatests.dir/YGMeasureTest.cpp.o CMakeFiles/yogatests.dir/YGNodeCallbackTest.cpp.o CMakeFiles/yogatests.dir/YGNodeChildTest.cpp.o CMakeFiles/yogatests.dir/YGPersistenceTest.cpp.o CMakeFiles/yogatests.dir/YGRelayoutTest.cpp.o CMakeFiles/yogatests.dir/YGRoundingFunctionTest.cpp.o CMakeFiles/yogatests.dir/YGRoundingMeasureFuncTest.cpp.o CMakeFiles/yogatests.dir/YGStyleAccessorsTest.cpp.o CMakeFiles/yogatests.dir/YGStyleTest.cpp.o CMakeFiles/yogatests.dir/YGTreeMutationTest.cpp.o CMakeFiles/yogatests.dir/YGValueTest.cpp.o CMakeFiles/yogatests.dir/YGZeroOutLayoutRecursivlyTest.cpp.o CMakeFiles/yogatests.dir/generated/YGAbsolutePositionTest.cpp.o CMakeFiles/yogatests.dir/generated/YGAlignContentTest.cpp.o CMakeFiles/yogatests.dir/generated/YGAlignItemsTest.cpp.o CMakeFiles/yogatests.dir/generated/YGAlignSelfTest.cpp.o CMakeFiles/yogatests.dir/generated/YGAndroidNewsFeed.cpp.o CMakeFiles/yogatests.dir/generated/YGBorderTest.cpp.o CMakeFiles/yogatests.dir/generated/YGConfigTest.cpp.o CMakeFiles/yogatests.dir/generated/YGDimensionTest.cpp.o CMakeFiles/yogatests.dir/generated/YGDisplayTest.cpp.o CMakeFiles/yogatests.dir/generated/YGFlexDirectionTest.cpp.o CMakeFiles/yogatests.dir/generated/YGFlexTest.cpp.o CMakeFiles/yogatests.dir/generated/YGFlexWrapTest.cpp.o CMakeFiles/yogatests.dir/generated/YGGapTest.cpp.o CMakeFiles/yogatests.dir/generated/YGJustifyContentTest.cpp.o CMakeFiles/yogatests.dir/generated/YGMarginTest.cpp.o CMakeFiles/yogatests.dir/generated/YGMinMaxDimensionTest.cpp.o CMakeFiles/yogatests.dir/generated/YGPaddingTest.cpp.o CMakeFiles/yogatests.dir/generated/YGPercentageTest.cpp.o CMakeFiles/yogatests.dir/generated/YGRoundingTest.cpp.o CMakeFiles/yogatests.dir/generated/YGSizeOverflowTest.cpp.o CMakeFiles/yogatests.dir/util/TestUtil.cpp.o -o yogatests  -Wl,-rpath,/home/sstarr/Downloads/yoga-2.0.0/build/yoga:/home/sstarr/Downloads/yoga-2.0.0/build/lib ../yoga/libyogacore.so ../lib/libgtest_main.so.1.12.1 ../lib/libgtest.so.1.12.1 
/usr/bin/ld: CMakeFiles/yogatests.dir/YGFloatOptionalTest.cpp.o: in function `YGFloatOptionalTest_YGFloatOptionalMax_Test::TestBody()':
YGFloatOptionalTest.cpp:(.text+0xb413): undefined reference to `YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)'
/usr/bin/ld: YGFloatOptionalTest.cpp:(.text+0xb50d): undefined reference to `YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)'
/usr/bin/ld: YGFloatOptionalTest.cpp:(.text+0xb5f8): undefined reference to `YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)'
/usr/bin/ld: YGFloatOptionalTest.cpp:(.text+0xb6f6): undefined reference to `YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)'
/usr/bin/ld: YGFloatOptionalTest.cpp:(.text+0xb81d): undefined reference to `YGFloatOptionalMax(YGFloatOptional, YGFloatOptional)'
collect2: error: ld returned 1 exit status
make[2]: *** [tests/CMakeFiles/yogatests.dir/build.make:887: tests/yogatests] Error 1
make[2]: Leaving directory '/home/sstarr/Downloads/yoga-2.0.0/build'
make[1]: *** [CMakeFiles/Makefile2:218: tests/CMakeFiles/yogatests.dir/all] Error 2
make[1]: Leaving directory '/home/sstarr/Downloads/yoga-2.0.0/build'
make: *** [Makefile:139: all] Error 2
[sstarr@desktop-59bitp3 build]$ make VERBOSE=1

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

I found the following entry in the shared library:

0000000000006bd0 t _Z18YGFloatOptionalMax15YGFloatOptionalS_

by executing nm libyogacore.so > shared_symbols.txt. According to the documentation for the nm command, the t indicates that this symbol is in the text (code) section of the shared library and has local linkage. This means that the symbol is not visible outside the shared library itself, explaining the undefined reference error I encountered when linking against it in yogatests.

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

I found the problem in the Utils.h file on line 72. I changed this code:

YGFloatOptional YGFloatOptionalMax(
    const YGFloatOptional op1,
    const YGFloatOptional op2);

to:

__attribute__((visibility("default"))) YGFloatOptional YGFloatOptionalMax(
    const YGFloatOptional op1,
    const YGFloatOptional op2);

Now everything builds correctly. I would really appreciate it if the Yoga developers could conduct their testing, and possibly include an option to build a shared library in a future release.

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

It’s hard to tell what the issue is with the limited error output.

Instead of changing yogacore to be either a shared or static library, it might be easier to link the static library into a new shared library. As a reference, the JNI bindings do just this, and link in some more code which is binding specific to a final libyoga.so. https://github.com/facebook/yoga/blob/main/java/CMakeLists.txt.

I just realized we are neighbors; I am in Bremerton, WA. ;)

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

I should also note that what I did, I believe, only works when building using the GCC compiler, maybe LLVM, but I'm not sure. A solution that works for all supported compilers would probably look different than what I did above. When I have time, I'll look into Windows and MacOS (Intel), but mobile and Apple Silicon are beyond my capabilities. But the above at-least works on Linux.

Utils.h

// Static build regardless should work fine.
#if defined(__GNUC__) // Shared build using gcc will work.
__attribute__((visibility("default"))) YGFloatOptional YGFloatOptionalMax(
    const YGFloatOptional op1,
    const YGFloatOptional op2);
#else
// Shared build using any other compiler might fail
YGFloatOptional YGFloatOptionalMax(
    const YGFloatOptional op1,
    const YGFloatOptional op2);
#endif

from yoga.

NickGerleman avatar NickGerleman commented on May 23, 2024

There are macros like YG_EXPORT for defining what functions should be exported out of a shared library. Though it seems like unit tests are potentially poking at Yoga internals. I think it is reasonable that the unit tests are able to access APIs we would ideally not export from the library boundary. I.e. I think it might best to keep GTest binary statically linked to Yoga.

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

There are macros like YG_EXPORT for defining what functions should be exported out of a shared library. Though it seems like unit tests are potentially poking at Yoga internals. I think it is reasonable that the unit tests are able to access APIs we would ideally not export from the library boundary. I.e. I think it might best to keep GTest binary statically linked to Yoga.

As far as I can tell from scanning the code base, there is no YG_EXPORT already defined, so it would need to be created. Regarding the decision to keep the GTest binary statically linked, I completely disagree. The simple fact is that it doesn't matter either way because GTest isn't getting deployed to the end user, and it serves no other purpose outside of testing the API.

from yoga.

NickGerleman avatar NickGerleman commented on May 23, 2024

Oh, it looks like the export macros are YOGA_EXPORT and WIN_EXPORT. I don't see why these are separate right now on first glance. These also break the convention of the other macros starting with YG_ https://github.com/facebook/yoga/blob/main/yoga/YGMacros.h

The downside of dynamically linking GTest, apart from just the added build config, is that it means anything the UT consumes must be exported from Yoga. This means we need to expose functions in the export table, that were previously considered private. Though if there aren't too many extra exports, and they are safe to be public, I think we could add them.

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

Thanks for pointing that out. It's crazy that I missed YGMacros.h and ...

#ifdef _WINDLL
#define WIN_EXPORT __declspec(dllexport)
#else
#define WIN_EXPORT
#endif

#ifndef YOGA_EXPORT
#ifdef _MSC_VER
#define YOGA_EXPORT
#else
#define YOGA_EXPORT __attribute__((visibility("default")))
#endif
#endif

from yoga.

sstarr-squidfx avatar sstarr-squidfx commented on May 23, 2024

I made the following modification to Utils.h, which resulted in everything functioning correctly on Linux and MacOS. However, when attempting to build the shared library on Windows 10 using CMake and Visual Studio 2022, an error arises during the yogatest building stage.

Utils.h

#if defined(_WINDLL)
#define EXPORT WIN_EXPORT
#else
#define EXPORT YOGA_EXPORT
#endif

EXPORT YGFloatOptional YGFloatOptionalMax(
    const YGFloatOptional op1,
    const YGFloatOptional op2);
Target Link:
7>  CompactValueTest.obj : error LNK2001: unresolved external symbol YGValueAuto
7>  CompactValueTest.obj : error LNK2001: unresolved external symbol YGValueUndefined
7>  EventsTest.obj : error LNK2019: unresolved external symbol YGNodeSetBaselineFunc referenced in function "private: virtual void __cdecl facebook::yoga::test::EventTest_baseline_functions_get_wrapped_Test::TestBody(void)" (?TestBody@EventTest_baseline_functions_get_wrapped_Test@test@yoga@facebook@@EEAAXXZ)
7>  YGAlignBaselineTest.obj : error LNK2001: unresolved external symbol YGNodeSetBaselineFunc
7>  YGNodeCallbackTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGRoundingMeasureFuncTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGAspectRatioTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGMeasureCacheTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGMeasureModeTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGMeasureTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>  YGDirtiedTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::setDirty(bool)" (?setDirty@YGNode@@QEAAX_N@Z) referenced in function "private: virtual void __cdecl YogaTest_dirtied_Test::TestBody(void)" (?TestBody@YogaTest_dirtied_Test@@EEAAXXZ)
7>  YGDirtiedTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::markDirtyAndPropagate(void)" (?markDirtyAndPropagate@YGNode@@QEAAXXZ) referenced in function "private: virtual void __cdecl YogaTest_dirtied_propagation_Test::TestBody(void)" (?TestBody@YogaTest_dirtied_propagation_Test@@EEAAXXZ)
7>  YGLoggerTest.obj : error LNK2019: unresolved external symbol YGConfigSetPrintTreeFlag referenced in function "private: virtual void __cdecl YogaTest_config_print_tree_enabled_Test::TestBody(void)" (?TestBody@YogaTest_config_print_tree_enabled_Test@@EEAAXXZ)
7>  YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: __cdecl YGNode::YGNode(struct YGConfig * const)" (??0YGNode@@QEAA@QEAUYGConfig@@@Z) referenced in function "public: __cdecl YGNode::YGNode(void)" (??0YGNode@@QEAA@XZ)
7>  YGConfigTest.obj : error LNK2001: unresolved external symbol "public: __cdecl YGNode::YGNode(struct YGConfig * const)" (??0YGNode@@QEAA@QEAUYGConfig@@@Z)
7>  YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: struct YGSize __cdecl YGNode::measure(float,enum YGMeasureMode,float,enum YGMeasureMode,void *)" (?measure@YGNode@@QEAA?AUYGSize@@MW4YGMeasureMode@@M0PEAX@Z) referenced in function "private: virtual void __cdecl YGNode_measure_with_measure_fn_Test::TestBody(void)" (?TestBody@YGNode_measure_with_measure_fn_Test@@EEAAXXZ)
7>  YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: float __cdecl YGNode::baseline(float,float,void *)" (?baseline@YGNode@@QEAAMMMPEAX@Z) referenced in function "private: virtual void __cdecl YGNode_baseline_with_baseline_fn_Test::TestBody(void)" (?TestBody@YGNode_baseline_with_baseline_fn_Test@@EEAAXXZ)
7>  YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode,void *))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1PEAX@Z@Z) referenced in function "private: virtual void __cdecl YGNode_measure_with_context_measure_fn_Test::TestBody(void)" (?TestBody@YGNode_measure_with_context_measure_fn_Test@@EEAAXXZ)
7>  YGConfigTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGConfig::setCloneNodeCallback(struct YGNode * (__cdecl*)(struct YGNode *,struct YGNode *,int))" (?setCloneNodeCallback@YGConfig@@QEAAXP6APEAUYGNode@@PEAU2@0H@Z@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_uses_values_provided_by_cloning_callback_Test::TestBody(void)" (?TestBody@ConfigCloningTest_uses_values_provided_by_cloning_callback_Test@@EEAAXXZ)
7>  YGConfigTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGConfig::setCloneNodeCallback(struct YGNode * (__cdecl*)(struct YGNode *,struct YGNode *,int,void *))" (?setCloneNodeCallback@YGConfig@@QEAAXP6APEAUYGNode@@PEAU2@0HPEAX@Z@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_can_clone_with_context_Test::TestBody(void)" (?TestBody@ConfigCloningTest_can_clone_with_context_Test@@EEAAXXZ)
7>  YGConfigTest.obj : error LNK2019: unresolved external symbol "public: struct YGNode * __cdecl YGConfig::cloneNode(struct YGNode *,struct YGNode *,int,void *)const " (?cloneNode@YGConfig@@QEBAPEAUYGNode@@PEAU2@0HPEAX@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_uses_values_provided_by_cloning_callback_Test::TestBody(void)" (?TestBody@ConfigCloningTest_uses_values_provided_by_cloning_callback_Test@@EEAAXXZ)
7>  TestUtil.obj : error LNK2019: unresolved external symbol "public: static void __cdecl facebook::yoga::Event::reset(void)" (?reset@Event@yoga@facebook@@SAXXZ) referenced in function "public: static int __cdecl facebook::yoga::test::TestUtil::stopCountingNodes(void)" (?stopCountingNodes@TestUtil@test@yoga@facebook@@SAHXZ)
7>  TestUtil.obj : error LNK2019: unresolved external symbol "public: static void __cdecl facebook::yoga::Event::subscribe(class std::function<void __cdecl(struct YGNode const &,enum facebook::yoga::Event::Type,class facebook::yoga::Event::Data)> &&)" (?subscribe@Event@yoga@facebook@@SAX$$QEAV?$function@$$A6AXAEBUYGNode@@W4Type@Event@yoga@facebook@@VData@345@@Z@std@@@Z) referenced in function "public: static void __cdecl facebook::yoga::test::TestUtil::startCountingNodes(void)" (?startCountingNodes@TestUtil@test@yoga@facebook@@SAXXZ)
7>  C:\Users\steve\Desktop\SquidFX\yoga\build\tests\Debug\yogatests.exe : fatal error LNK1120: 16 unresolved externals
7>Done building target "Link" in project "yogatests.vcxproj" -- FAILED.
7>
7>Done building project "yogatests.vcxproj" -- FAILED.
7>
7>Build FAILED.
7>
7>CompactValueTest.obj : error LNK2001: unresolved external symbol YGValueAuto
7>CompactValueTest.obj : error LNK2001: unresolved external symbol YGValueUndefined
7>EventsTest.obj : error LNK2019: unresolved external symbol YGNodeSetBaselineFunc referenced in function "private: virtual void __cdecl facebook::yoga::test::EventTest_baseline_functions_get_wrapped_Test::TestBody(void)" (?TestBody@EventTest_baseline_functions_get_wrapped_Test@test@yoga@facebook@@EEAAXXZ)
7>YGAlignBaselineTest.obj : error LNK2001: unresolved external symbol YGNodeSetBaselineFunc
7>YGNodeCallbackTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGRoundingMeasureFuncTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGAspectRatioTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGMeasureCacheTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGMeasureModeTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGMeasureTest.obj : error LNK2001: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1@Z@Z)
7>YGDirtiedTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::setDirty(bool)" (?setDirty@YGNode@@QEAAX_N@Z) referenced in function "private: virtual void __cdecl YogaTest_dirtied_Test::TestBody(void)" (?TestBody@YogaTest_dirtied_Test@@EEAAXXZ)
7>YGDirtiedTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::markDirtyAndPropagate(void)" (?markDirtyAndPropagate@YGNode@@QEAAXXZ) referenced in function "private: virtual void __cdecl YogaTest_dirtied_propagation_Test::TestBody(void)" (?TestBody@YogaTest_dirtied_propagation_Test@@EEAAXXZ)
7>YGLoggerTest.obj : error LNK2019: unresolved external symbol YGConfigSetPrintTreeFlag referenced in function "private: virtual void __cdecl YogaTest_config_print_tree_enabled_Test::TestBody(void)" (?TestBody@YogaTest_config_print_tree_enabled_Test@@EEAAXXZ)
7>YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: __cdecl YGNode::YGNode(struct YGConfig * const)" (??0YGNode@@QEAA@QEAUYGConfig@@@Z) referenced in function "public: __cdecl YGNode::YGNode(void)" (??0YGNode@@QEAA@XZ)
7>YGConfigTest.obj : error LNK2001: unresolved external symbol "public: __cdecl YGNode::YGNode(struct YGConfig * const)" (??0YGNode@@QEAA@QEAUYGConfig@@@Z)
7>YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: struct YGSize __cdecl YGNode::measure(float,enum YGMeasureMode,float,enum YGMeasureMode,void *)" (?measure@YGNode@@QEAA?AUYGSize@@MW4YGMeasureMode@@M0PEAX@Z) referenced in function "private: virtual void __cdecl YGNode_measure_with_measure_fn_Test::TestBody(void)" (?TestBody@YGNode_measure_with_measure_fn_Test@@EEAAXXZ)
7>YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: float __cdecl YGNode::baseline(float,float,void *)" (?baseline@YGNode@@QEAAMMMPEAX@Z) referenced in function "private: virtual void __cdecl YGNode_baseline_with_baseline_fn_Test::TestBody(void)" (?TestBody@YGNode_baseline_with_baseline_fn_Test@@EEAAXXZ)
7>YGNodeCallbackTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGNode::setMeasureFunc(struct YGSize (__cdecl*)(struct YGNode *,float,enum YGMeasureMode,float,enum YGMeasureMode,void *))" (?setMeasureFunc@YGNode@@QEAAXP6A?AUYGSize@@PEAU1@MW4YGMeasureMode@@M1PEAX@Z@Z) referenced in function "private: virtual void __cdecl YGNode_measure_with_context_measure_fn_Test::TestBody(void)" (?TestBody@YGNode_measure_with_context_measure_fn_Test@@EEAAXXZ)
7>YGConfigTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGConfig::setCloneNodeCallback(struct YGNode * (__cdecl*)(struct YGNode *,struct YGNode *,int))" (?setCloneNodeCallback@YGConfig@@QEAAXP6APEAUYGNode@@PEAU2@0H@Z@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_uses_values_provided_by_cloning_callback_Test::TestBody(void)" (?TestBody@ConfigCloningTest_uses_values_provided_by_cloning_callback_Test@@EEAAXXZ)
7>YGConfigTest.obj : error LNK2019: unresolved external symbol "public: void __cdecl YGConfig::setCloneNodeCallback(struct YGNode * (__cdecl*)(struct YGNode *,struct YGNode *,int,void *))" (?setCloneNodeCallback@YGConfig@@QEAAXP6APEAUYGNode@@PEAU2@0HPEAX@Z@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_can_clone_with_context_Test::TestBody(void)" (?TestBody@ConfigCloningTest_can_clone_with_context_Test@@EEAAXXZ)
7>YGConfigTest.obj : error LNK2019: unresolved external symbol "public: struct YGNode * __cdecl YGConfig::cloneNode(struct YGNode *,struct YGNode *,int,void *)const " (?cloneNode@YGConfig@@QEBAPEAUYGNode@@PEAU2@0HPEAX@Z) referenced in function "private: virtual void __cdecl ConfigCloningTest_uses_values_provided_by_cloning_callback_Test::TestBody(void)" (?TestBody@ConfigCloningTest_uses_values_provided_by_cloning_callback_Test@@EEAAXXZ)
7>TestUtil.obj : error LNK2019: unresolved external symbol "public: static void __cdecl facebook::yoga::Event::reset(void)" (?reset@Event@yoga@facebook@@SAXXZ) referenced in function "public: static int __cdecl facebook::yoga::test::TestUtil::stopCountingNodes(void)" (?stopCountingNodes@TestUtil@test@yoga@facebook@@SAHXZ)
7>TestUtil.obj : error LNK2019: unresolved external symbol "public: static void __cdecl facebook::yoga::Event::subscribe(class std::function<void __cdecl(struct YGNode const &,enum facebook::yoga::Event::Type,class facebook::yoga::Event::Data)> &&)" (?subscribe@Event@yoga@facebook@@SAX$$QEAV?$function@$$A6AXAEBUYGNode@@W4Type@Event@yoga@facebook@@VData@345@@Z@std@@@Z) referenced in function "public: static void __cdecl facebook::yoga::test::TestUtil::startCountingNodes(void)" (?startCountingNodes@TestUtil@test@yoga@facebook@@SAXXZ)
7>C:\Users\steve\Desktop\SquidFX\yoga\build\tests\Debug\yogatests.exe : fatal error LNK1120: 16 unresolved externals
7>    0 Warning(s)
7>    24 Error(s)
7>
7>Time Elapsed 00:00:50.54
8>------ Build started: Project: ALL_BUILD, Configuration: Debug x64 ------
8>Build started 8/8/2023 6:21:45 PM.
8>Target ResolveProjectReferences:
8>  Target GetTargetPathWithTargetPlatformMoniker:
8>Target PrepareForBuild:
8>  Creating directory "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\".
8>Target InitializeBuildStatus:
8>  Creating "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
8>Target CustomBuild:
8>  Building Custom Rule C:/Users/steve/Desktop/SquidFX/yoga/CMakeLists.txt
8>Target GetReferencedVCProjectsInfo:
8>  Target DisableProjectReferenceRecursionForClInputs:
8>Target FinalizeBuildStatus:
8>  Deleting file "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
8>  Touching "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\ALL_BUILD.lastbuildstate".
8>
8>Build succeeded.
8>    0 Warning(s)
8>    0 Error(s)
8>
8>Time Elapsed 00:00:00.16
9>------ Skipped Build: Project: INSTALL, Configuration: Debug x64 ------
9>Project not selected to build for this solution configuration 
========== Build: 7 succeeded, 1 failed, 0 up-to-date, 1 skipped ==========
========== Build started at 6:20 PM and took 57.630 seconds ==========

from yoga.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.