{"action":"created","issue":{"url":"https://api.github.com/repos/mapbox/mason/issues/111","labels_url":"https://api.github.com/repos/mapbox/mason/issues/111/labels{/name}","comments_url":"https://api.github.com/repos/mapbox/mason/issues/111/comments","events_url":"https://api.github.com/repos/mapbox/mason/issues/111/events","html_url":"https://github.com/mapbox/mason/issues/111","id":106884493,"number":111,"title":"Design a system to provide binaries of C++ libraries built for different ABIs","user":{"login":"lucaswoj","id":281306,"avatar_url":"https://avatars.githubusercontent.com/u/281306?v=3","gravatar_id":"","url":"https://api.github.com/users/lucaswoj","html_url":"https://github.com/lucaswoj","followers_url":"https://api.github.com/users/lucaswoj/followers","following_url":"https://api.github.com/users/lucaswoj/following{/other_user}","gists_url":"https://api.github.com/users/lucaswoj/gists{/gist_id}","starred_url":"https://api.github.com/users/lucaswoj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lucaswoj/subscriptions","organizations_url":"https://api.github.com/users/lucaswoj/orgs","repos_url":"https://api.github.com/users/lucaswoj/repos","events_url":"https://api.github.com/users/lucaswoj/events{/privacy}","received_events_url":"https://api.github.com/users/lucaswoj/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":7,"created_at":"2015-09-16T23:25:05Z","updated_at":"2015-09-18T17:47:35Z","closed_at":null,"body":"@jfirebaugh explained the fundamental issue:\r\n\r\n > ... there is an issue with using prebuilt ​_C++_​ libraries with mason that so far we don't have a solution for: C++ libraries that use C++ standard library objects in their APIs then have an ​_ABI_​ dependency on the C++ standard library they were build with. They can't be linked into a program that uses a different C++ standard library. But precompiled mason libraries are ​_not namespaced by C++ stdlib_​.\r\n\r\n > In other words: ​_mason is not currently safe to use with C++ libraries_​.\r\n\r\n > Unless you force it to build from source.\r\n\r\n > the majority of libraries we use mason for are ​_C_​ libraries, not ​_C++_​ libraries\r\n\r\nThis ticket is for brainstorming and designing solutions to this problem. Should Mason to provide a set of binaries for C++ libraries built different stdlib versions? How should we go about building such a system?\r\n\r\ncc @jfirebaugh @mikemorris @springmeyer @ljbade \r\n\r\nref https://github.com/mapbox/mapbox-gl-native/issues/2348"},"comment":{"url":"https://api.github.com/repos/mapbox/mason/issues/comments/141518068","html_url":"https://github.com/mapbox/mason/issues/111#issuecomment-141518068","issue_url":"https://api.github.com/repos/mapbox/mason/issues/111","id":141518068,"user":{"login":"jfirebaugh","id":98601,"avatar_url":"https://avatars.githubusercontent.com/u/98601?v=3","gravatar_id":"","url":"https://api.github.com/users/jfirebaugh","html_url":"https://github.com/jfirebaugh","followers_url":"https://api.github.com/users/jfirebaugh/followers","following_url":"https://api.github.com/users/jfirebaugh/following{/other_user}","gists_url":"https://api.github.com/users/jfirebaugh/gists{/gist_id}","starred_url":"https://api.github.com/users/jfirebaugh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jfirebaugh/subscriptions","organizations_url":"https://api.github.com/users/jfirebaugh/orgs","repos_url":"https://api.github.com/users/jfirebaugh/repos","events_url":"https://api.github.com/users/jfirebaugh/events{/privacy}","received_events_url":"https://api.github.com/users/jfirebaugh/received_events","type":"User","site_admin":false},"created_at":"2015-09-18T17:47:35Z","updated_at":"2015-09-18T17:47:35Z","body":"I'm not seeing how linking C++ stdlib statically would help. The issue is in the following scenario:\r\n\r\n* Library foo build by mason uses C++ stdlib A _in the public interface_ (e.g., methods accept or return `std::string`).\r\n* Downstream project depends on foo, uses C++ stdlib B.\r\n* A and B have incompatible ABIs.\r\n\r\nWhether foo links A dynamically or statically doesn't matter -- in either case C++ stdlib A's ABI is part of the interface, and will conflict with downstream projects that use B."}}