10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
1

Ошибка Nonshared DATA segment required

15.09.2015, 11:02. Показов 8266. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Builder XE8, Windows 10.

При старте нового проекта и включении опции Codeguard после запуске программы возникает ошибка "Nonshared DATA segment required". Если при этом отключить опцию Link with Dynamic RTL, то ошибки нет, но работать с отключенными библиотеками не хотелось бы. Кто-то сталкивался с подобной проблемой?

Решение вроде бы нашел на форуме Embarcadero, но не понимаю как его исполнить. Вот английский текст:
Finally I got a solution for my case!

For me CG was not an issue as I described above already.

A have a lot of old code and some of them had the pragma -dc, and it puts const string literals to specific data segment.
It seems that those segment are shared.

After all, disabling -dc compiler flag lets it run on windows 8.
So besides CG incompatibility the compiler flag -dc kills windows 8 deployment as well.
А где этот флаг "-dc" отключается и что он означает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2015, 11:02
Ответы с готовыми решениями:

Ошибка "Nonshared DATA segment required" при включении CodeGuard
При включении CodeGuard возникает ошибка "Nonshared DATA segment required". На форуме и в интернете...

Ошибка в c++ builder 6 Unsupported 16-bit segment(s) in module MYMODULE
Создал пустой проект, к нему линкую старую либу, собранную под дос c++ builder 3.1, выдает ошибку...

Ошибка E2277 Lvalue required
У меня есть структура struct equip { int id; char name; float price;...

Ошибка Structure required on left side of . or .*
Ошибка Structure required on left side of . or .* в строке 50:...

10
1406 / 569 / 127
Регистрация: 31.10.2011
Сообщений: 1,957
16.09.2015, 01:47 2
Нитонисе, не совсем уверен, но подозреваю, что это находится здесь
Миниатюры
Ошибка Nonshared DATA segment required  
0
1406 / 569 / 127
Регистрация: 31.10.2011
Сообщений: 1,957
16.09.2015, 01:54 3
если бы кто еще подсказал какие флаги компилятора как включать,
например, через прагму (ну или через опции поекта), было бы вообще супер
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.09.2015, 09:59  [ТС] 4
Цитата Сообщение от _Dimon_ Посмотреть сообщение
не совсем уверен, но подозреваю, что это находится здесь
Здесь только переключатель true/false, который не влияет на ошибку - она все также появляется.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32592 / 21061 / 8134
Регистрация: 22.10.2011
Сообщений: 36,332
Записей в блоге: 8
16.09.2015, 13:59 5
Цитата Сообщение от Нитонисе Посмотреть сообщение
Здесь только переключатель true/false
Правильно. -dc - тоже переключатель. Либо он есть, либо его нет, а есть -dw, который заставляет писать строки во writable сегмент данных. И опция -dc включается именно там, где показано выше, вот, посмотри: C++ Compiler Advanced, а самом низу страницы. Там есть и ключи для компилятора ком. строки, которым соответствуют те или иные настройки.

Если это не влияет на работоспособность твоей программы - то ты нашел неподходящее для своего случая решение.
2
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.09.2015, 14:34  [ТС] 6
volvo, ок, понял. Однако по умолчанию эти две опции и так были отключены, так что по идее они и не могли быть причиной ошибки. На всякий случай попробовал со включенными - не работает.

Цитата Сообщение от volvo Посмотреть сообщение
Если это не влияет на работоспособность твоей программы - то ты нашел неподходящее для своего случая решение.
Если я правильно понял такая ошибка должна быть у всех пользователей Win8 и Win10. Она возникает и при создании нового приложения, если установить
Project->Options->C++ Compiler->Debugging->Enable Codeguard = true
и
Project->Options->C++ Linker->Link with Dynamic RTL = true.

Я использую опцию Codeguard для отслеживания ошибок освобождения динамически выделяемой памяти. Есть ли какая-то альтернатива этому инструменту?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32592 / 21061 / 8134
Регистрация: 22.10.2011
Сообщений: 36,332
Записей в блоге: 8
16.09.2015, 15:10 7
CodeGuard используется для отладки. Кто мешает отладку делать при отключенном Dynamic RTL, а потом, когда отладка завершена, уже выключать CG и включать вторую галку?
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.09.2015, 15:29  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
CodeGuard используется для отладки. Кто мешает отладку делать при отключенном Dynamic RTL, а потом, когда отладка завершена, уже выключать CG и включать вторую галку?
Так у меня CG включен все время. Я же написал пару строк кода - запустил программу на исполнение, чтобы посмотреть результат. CG выдает сообщения, если где-то не освобождается динамически выделяемая память. Сразу же начинаю искать причину и устранять. Это же удобнее, чем сначала работать без CG, а потом выявлять утечки памяти при глобальном тестировании.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32592 / 21061 / 8134
Регистрация: 22.10.2011
Сообщений: 36,332
Записей в блоге: 8
16.09.2015, 15:33 9
Ну так пока CG включен - не включай вторую галку.

И потом. То, что у тебя сразу ничего не находится - не значит, что потом не найдется ничего, при общем тестировании. Программу надо гонять долго и упорно, чтобы выполнялись все участки кода (статического анализа кода в Билдере нет, юнит-тесты ты тоже, как я понимаю, не используешь), и только потом уже принимать решение об отключении отладочных средств. Вот в этот момент и включишь вторую галку.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
16.09.2015, 15:47  [ТС] 10
Цитата Сообщение от volvo Посмотреть сообщение
Ну так пока CG включен - не включай вторую галку
Сейчас так и делаю. Просто я раньше всегда работал с Dynamic RTL, а сейчас этой опцией не могу пользоваться, так как CG для меня важнее.

Цитата Сообщение от volvo Посмотреть сообщение
И потом. То, что у тебя сразу ничего не находится - не значит, что потом не найдется ничего, при общем тестировании.
Да. Но большинство ошибок все же отлавливает.
0
1406 / 569 / 127
Регистрация: 31.10.2011
Сообщений: 1,957
17.09.2015, 02:02 11
volvo, спасибо за ссылку на C++ Compiler Advanced
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2015, 02:02
Помогаю со студенческими работами здесь

Ошибка "partner index segment №1 has incompatible data type" сегмент индекса партнера №1 имеет несовместимый тип данных
/******************************************************************************/ /*** ...

Error 49: data segment too large
Program Text; Const Nmax = 790; Type String80 = string; StringAr =...

Деление многочленов (с Си) (Code or data emission to undeclared segment)
Всем доброго время суток. необходима ваша помощь. Необходимо поделить один многочлен на другой....

Ошибка при создании объекта '\controllers\\'.$segment
Если написать: $segment = "\controllers\\" . $segment; $controller = new $segment; То всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru