OSDN Git Service

GCC4.7でon_loadでの文字列の代入が不正終了してしまう問題への暫定的な対処。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Tue, 19 Jun 2012 02:17:36 +0000 (02:17 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Tue, 19 Jun 2012 02:17:36 +0000 (02:17 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@616 9df91469-1e22-0410-86e7-ea8537beb833

src/common/library/library.h

index 540f723..416c800 100644 (file)
@@ -64,11 +64,6 @@ inline wxDateTime FileTimeToWxDateTime(FILETIME * pft)
 #ifdef MYUSE_LIBPATH\r
 wxString g_szLibPath;\r
 \r
-wxString inline myMakeXMLName(const wxString & szFile)\r
-{\r
-       return g_szLibPath + szFile + wxT(".xml");\r
-}\r
-\r
 #ifdef __WINDOWS__\r
 BOOL WINAPI DllMain(HINSTANCE hLib, DWORD dwReason, void *)\r
 {\r
@@ -76,17 +71,31 @@ BOOL WINAPI DllMain(HINSTANCE hLib, DWORD dwReason, void *)
        {\r
                wchar_t szName[1024];\r
                ::GetModuleFileName(hLib, szName, sizeof(szName) - 1);\r
-               g_szLibPath = wxFileName::wxFileName(WC2String(szName)).GetPath(true);\r
+               g_szLibPath = wxFileName(WC2String(szName)).GetPath(true);\r
        }\r
        return TRUE;\r
 }\r
 #else\r
 #include <dlfcn.h>\r
-__attribute__((constructor)) void on_load(void)\r
+// GCC4.7ではg_szLibPathへの代入で不正終了してしまうので、myMakeXMLNameの初回に呼ぶように変更。\r
+//__attribute__((constructor))\r
+void inline on_load(void)\r
 {\r
        Dl_info dl;\r
        dladdr((void *) on_load, & dl);\r
        g_szLibPath = wxFileName(UTF82String(dl.dli_fname)).GetPath(true);\r
 }\r
 #endif\r
+\r
+wxString myMakeXMLName(const wxString & szFile)\r
+{\r
+#ifdef __LINUX__\r
+       if (g_szLibPath.IsEmpty())\r
+       {\r
+               // 初回はライブラリが存在するディレクトリを取得。\r
+               on_load();\r
+       }\r
+#endif\r
+       return g_szLibPath + szFile + wxT(".xml");\r
+}\r
 #endif\r