ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-4599: [C++] Add support for system GFlags - #3675

Closed
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags
Closed

ARROW-4599: [C++] Add support for system GFlags#3675
kou wants to merge 6 commits into
apache:masterfrom
kou:cpp-system-gflags

Conversation

@kou

@koukou commented Feb 17, 2019

Copy link
Copy Markdown
Member

This is needed to build tests with MinGW.

Comment threadci/travis_before_script_cpp.sh Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because @rpath can't be resolved with GFlags installed by conda-forge.

https://travis-ci.org/kou/arrow/jobs/494364820#L1993

 2/111 Test #1: plasma-serialization_tests ...................***Failed 1.36 sec
Running plasma-serialization_tests, redirecting output into /Users/travis/build/kou/arrow/cpp-build/build/test-logs/plasma-serialization_tests.txt (attempt 1/1)
dyld: Library not loaded: @rpath/libgflags.2.2.dylib
Referenced from: /Users/travis/build/kou/arrow/cpp-install/lib/libarrow.13.dylib
Reason: image not found

We will be able to resolve it by running each test with DYLD_LIBRARY_PATH environment variable:

DYLD_LIBRARY_PATH=${MINICONDA}/lib ${ARROW_BUILD_TYPE}/plasma-serialization_tests

Because DYLD_LIBRARY_PATH can affect only the child process.

It's not useful. So I use static library than shared library.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is working for all other libraries? Then there must be something wrong with libgflags.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other libraries are used as static library. So they work.

gflags-config.cmake provides @rpath/libgflags.2.2.dylib for IMPORTED_LOCATION. If gflags-config.cmake doesn't use @rpath, this will not be caused.

Generally, using @rpath isn't bad. GFlags installed from conda-forge can't assume where it's installed. So I think that using @rpath is reasonable for this case.

We will be able to resolve @rpath in our FindGFlags.cmake. This is another solution.

We can specify DYLD_LIBRARY_PATH to resolve @rpath in cpp/build-support/run-test.sh. This is also another solution.

@kou

kou commented Feb 17, 2019

Copy link
Copy Markdown
MemberAuthor

A job on AppVeyor is failed:

https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/22428811/job/p36y88oj2ja8on1t#L1236

gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
gflags_static.lib(gflags_completions.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in json-integration-test.cc.obj
libcpmtd.lib(stdthrow.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MT_StaticRelease' in json-integration-test.cc.obj
Creating library release\arrow-json-integration-test.lib and object release\arrow-json-integration-test.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _calloc_dbg referenced in function "char * __cdecl std::_Maklocstr<char>(char const *,char *,struct _Cvtvec const &)" (??$_Maklocstr@D@std@@YAPEADPEBDPEADAEBU_Cvtvec@@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _calloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _free_dbg referenced in function "private: void __cdecl std::_Yarn<char>::_Tidy(void)" (?_Tidy@?$_Yarn@D@std@@AEAAXXZ)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _free_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _malloc_dbg referenced in function "public: static void * __cdecl std::_Crt_new_delete::operator new(unsigned __int64,struct std::nothrow_t const &)" (??2_Crt_new_delete@std@@SAPEAX_KAEBUnothrow_t@1@@Z)
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _malloc_dbg
gflags_static.lib(gflags.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReportW referenced in function "public: bool __cdecl std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > >::operator==(class std::_Tree_const_iterator<class std::_Tree_val<struct std::_Tree_simple_types<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > > const &)const " (??8?$_Tree_const_iterator@V?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@std@@@std@@@std@@QEBA_NAEBV01@@Z)
gflags_static.lib(gflags_reporting.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
gflags_static.lib(gflags_completions.cc.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol _CrtDbgReportW
release\arrow-json-integration-test.exe : fatal error LNK1120: 4 unresolved externals

Using vendored version for this case is expected. Build type may be conflicted. I need to look into this.

Comment threadci/appveyor-cpp-build.bat Outdated

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because find_package(gflags CONFIG) can find GFlags in cpp\build-debug\gflags_ep-prefix\.

@kou

kou commented Feb 18, 2019

Copy link
Copy Markdown
MemberAuthor

CI is passed.
Now, this is ready to review.

kouand others added 6 commits February 18, 2019 19:02
If old build directory exists, CMake finds <package>-config.cmake from
old build directory. It's incompatible with new configuration.
Change-Id: Ied430fc43304f26e7d8490fbb3818ad4e9ceb510

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1. I rebased, will merge once the build passes

@kou

kou commented Feb 19, 2019

Copy link
Copy Markdown
MemberAuthor

CI is green. I'll merge this.

@koukou closed this in 24a98e4Feb 19, 2019
@kou
kou deleted the cpp-system-gflags branch February 20, 2019 00:26
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@kou@xhochy@wesm